美文网首页
第二章 Lambda表达式

第二章 Lambda表达式

作者: 大唐雷恋 | 来源:发表于2019-07-01 21:21 被阅读0次
    button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
    System.out.println("button clicked");
    }
    });
    

    引入Lambda表达式后:

    button.addActionListener(event -> System.out.println("button clicked"));
    

    编写Lambda表达式的不同形式:

    Runnable noArguments = () -> System.out.println("Hello World"); 
    ActionListener oneArgument = event -> System.out.println("button clicked"); 
    Runnable multiStatement = () -> {
    System.out.print("Hello");
    System.out.println(" World");
    };
    BinaryOperator<Long> add = (x, y) -> x + y; 
    BinaryOperator<Long> addExplicit = (Long x, Long y) -> x + y; 
    

    Lambda表达式本身的类型:函数接口

    函数接口

    java中重要的函数接口


    image.png

    类型推断

    Map<String,Integer> diamondWordCounts = new HashMap<>();
    

    Java 7 中程序员可省略构造函数的泛型类型,Java 8 更进一步,程序员可省略Lambda 表达式中的所有参数类型。再强调一次,这并不是魔法,javac 根据Lambda 表达式上下文信息就能推断出参数的正确类型。程序依然要经过类型检查来保证运行的安全性,但不用再显式声明类型罢了。这就是所谓的类型推断。

    Predicate接口的源码,接受一个对象,返回一个布尔值

    public interface Predicate<T>{
      boolean test(T t);
    }
    
    image.png
    BinaryOperator<Long> addLongs = (x, y) -> x + y;
    

    类型推断系统相当智能,但若信息不够,类型推断系统也无能为力。类型系统不会漫无边际地瞎猜,而会中止操作并报告编译错误,寻求帮助

    BinaryOperator add = (x, y) -> x + y;
    

    编译器给出的报错信息如下:
    Operator '& #x002B;' cannot be applied to java.lang.Object, java.lang.Object.

    要点回顾

    1.Lambda 表达式是􀅖 一个匿名方法,将行为像数据一样进行传递。
    2.Lambda表达式的常见结构:BinaryOperator<Integer> add = (x, y) → x + y。
    3.函数接口指仅具有单个抽象方法的接口,用来表示 Lambda表达式的类型。

    相关文章

      网友评论

          本文标题:第二章 Lambda表达式

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