美文网首页
Lambda表达式

Lambda表达式

作者: 心_的方向 | 来源:发表于2018-03-28 09:48 被阅读27次

    Java为什么需要Lambda表达式

    Lambda表达式为Java添加了缺少的函数式编程的特点,将函数作为一个参数传递。

    初步认识

    Lambda表示是一个没有声明、没有修饰符、返回值声明、名字的方法。当某个方法只会使用一次,用lambda表达式定义就可以很简短。

    Lambda表示的结构

    通常使用(argument) -> (body)语法书写,例如:

    (arg1, arg2) -> {body}
    (type1, type2) -> {body}
    

    一些常见的例子

    (int a, int b) -> { return a + b; }
    () -> System.out.println("hello world");
    () -> 42
    () -> { return 3.1415 };
    

    表达式结构的一些规范

    • 一个Lambda表达式可以有零个或者多个参数
    • 参数的类型可以明确声明,也可以根据上下文判断
    • 当只有一个参数时,圆括号可以省略。例如:a -> return a
    • 如果表达式的主体只包含一条语句,花括号{}可以省略
    • 返回类型与主体的返回类型相同,如果没有,就返回null

    在函数式接口中的使用

    函数式接口就是只包含一个抽象方法的接口。例如java.lang.Runnable就是一个函数式接口,因为Runnable接口中只声明了一个void run()方法。

    现在可以这么初始化一个线程

    new Thread(
      () -> System.out.println("hello");
    ).start();
    

    在上面的代码中,编译器会根据线程类的构造函数参数名public Thread(Runnable r){}自动推断,将Lambda表达式赋给Runnable接口。

    利用@Funcationallnterface对接口使用,就可以自己声明一个函数式接口。

    还可以使用双冒号(::)操作符将一个方法转化为lambda表达式

    //Old way:
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
    for(Integer n: list) {
       System.out.println(n);
    }
    
    //New way:
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
    list.forEach(n -> System.out.println(n));
    
    
    //or we can use :: double colon operator in Java 8
    list.forEach(System.out::println);
    

    相关文章

      网友评论

          本文标题:Lambda表达式

          本文链接:https://www.haomeiwen.com/subject/ffxycftx.html