第十三章 Lambda表达式

适用类型:接口的实现,接口且只有一个方法。

对象引用:对Lambda的再次精简

特征:1.返回值一致;2.参数列表对应(特殊方法除第一个参数后);

  • 实例方法引用:接口的抽象方法参数 和 接口的抽象方法体内对象调用的方法参数一致且返回类型一致。
// 1.匿名内部类
Consumer<String> consumer = new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
};
// 2.简化Lambda
Consumer<String> consumer2 = s -> System.out.println(s);
// 3.实例方法引用
Consumer<String> consumer3 =  System.out::println;
  • 静态方法引用:接口的抽象方法参数 和 接口的抽象方法体内类名调用的静态方法参数一致且返回类型一致。
// 匿名内部类
Function<Double, Long> function = new Function<>() {
    @Override
    public Long apply(Double aDouble) {
        return Math.round(aDouble);
    }
};
// 简化Lambda
Function<Double, Long> function2 = aDouble -> Math.round(aDouble);
// 静态方法引用
Function<Double, Long> function3 = Math::round;
  • 特殊方法引用:接口中抽象方法的第一个形参作为方法的调用对象,且从第二个开始(或无参)可以对应到被调用实例方法的参数列表中,且返回类型一致。
// 匿名内部类
Comparator<Double> comparator = new Comparator<>() {
    @Override
    public int compare(Double o1, Double o2) {
        return o1.compareTo(o2);
    }
};
// 简化Lambda
Comparator<Double> comparator2 = (o1, o2) -> o1.compareTo(o2);
// 特殊方法引用
Comparator<Double> comparator3 = Double::compare;
  • 构造方法引用:创建对象所调用构造方法参数列表 和 接口中方法的形参列表一致 且返回类型一致。
// 匿名内部类
Function<String, Person> function = new Function<>() {
    @Override
    public Person apply(String s) {
        return new Person(s);
    }
};
// 简化Lambda
Function<String, Person> function2 = s -> new Person(s);
// 特殊方法引用
Function<String, Person> function3 = Person::new;
  • 数组构造方法引用:创建并返回指定类型的数组;重写的方法有且只有一个整数型的参数,且该参数就是用于设置数组的空间长度,返回类型和创建数组的类型保持一致。类似构造方法引用。
// 匿名内部类
Function<Integer, int[]> integerFunction = new Function<>() {
    @Override
    public int[] apply(Integer number) {
        return new int[number];
    }
};
// 简化Lambda
Function<Integer, int[]> integerFunction2 = number -> new int[number];
// 数组构造方法引用
Function<Integer, int[]> integerFunction3 = int[]::new;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容