• Java8新特性03 Lambda表达式


    一. Lambda表达式概述

    Lambda表达式是Java8中最大的变化。它允许我们将一个函数当作方法的参数,或者说把一段代码当作数据使用。很多基于JVM平台的语言一开始就支持Lambda表达式,比如Scala,但是Java语言一直只能使用匿名内部类来替代Lambda表达式,直到Java8才使用Lambda表达式。

    二.定义

    Lambda表达式是一个匿名函数,它是一个函数式接口的具体实现方式;使用Lambda语法可以用来代替Java8之前的匿名内部类,从而简化代码。

    任意只包含一个抽象方法的接口(函数式接口),我们都可以用来做成Lambda表达式;

    三. Lambda表达式语法结构

    包含三个部分

    (1)参数:一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数;

    (2)箭头:->

    (3)方法体:一个方法体,可以是表达式和代码块,方法体是函数式接口里面方法的实现,如果Lambda的功能语句块太复杂,我们可以使用大括号包起来,跟普通的Java方法一样;

    总体结构如下:(parameters)->expression或者(parameters)->{statements;}

    四. 具体使用

     1 package com.test.a;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collections;
     5 import java.util.Comparator;
     6 import java.util.List;
     7 
     8 public class Test {
     9 
    10     public static void main(String args[]) {
    11         List<String> list=new ArrayList<String>();
    12         list.add("d");
    13         list.add("a");
    14         list.add("c");
    15         list.add("b");
    16         
    17         //法一
    18 //        Collections.sort(list, new Comparator<String>() {
    19 //
    20 //            @Override
    21 //            public int compare(String o1, String o2) {
    22 //                // TODO Auto-generated method stub
    23 //                return o1.compareTo(o2);
    24 //            }
    25 //            
    26 //        });
    27         
    28         //法二
    29 //        Collections.sort(list, (String o1,String o2)->o1.compareTo(o2));
    30         //法三
    31         Collections.sort(list, (String o1,String o2)->{return o1.compareTo(o2);});
    32         for(String a:list)
    33         {
    34             System.out.println(a);
    35         }
    36     }
    37 }
    View Code
    1 a
    2 b
    3 c
    4 d
    View Code

    note: 上面的String o1也可以不加String, jvm会自己解析;一句话也可以用大括号代替,但是必须是完整的语句

     举例:自定义函数式接口,并用Lambda表达式

    1 package com.test.a;
    2 
    3 @FunctionalInterface
    4 public interface MyFunction {
    5 
    6     public abstract String f();
    7     
    8 }
    View Code
     1 package com.test.a;
     2 
     3 public class Test {
     4     public static void main(String args[]) {
     5 
     6         MyFunction myFunction = () -> ("hello");
     7         String aString = myFunction.f();
     8         System.out.println(aString);
     9     }
    10 }
    11 
    12 
    13 hello
    View Code
  • 相关阅读:
    面试官问:MySQL锁与事物隔离级别你知道吗?
    MySQL性能优化 — 实践篇2
    asp.net大文件(视频)上传讨论
    asp.net大文件(视频)上传分享
    asp.net大文件(视频)上传问题
    asp.net大文件(视频)上传方法
    asp.net大文件(视频)上传思路
    asp.net大文件(视频)上传功能
    asp.net大文件(视频)上传教程
    ckeditor粘贴word文档图片的源代码
  • 原文地址:https://www.cnblogs.com/Hermioner/p/9662008.html
Copyright © 2020-2023  润新知