介绍
它是 Java8 引入的新特性之一,常常被称作为方法引用。使用"::"可以进一步简化一些使用了 lambda 表达式的代码,让代码更加简洁。 可以直接引用已有 Java 类或对象的方法或构造器。方法引用通常与 Lambda 表达式结合使用以简化代码。其使用条件是:Lambda 表达式的主体仅包含一个表达式,且 Lambda 表达式只调用了一个已经存在的方法;被引用的方法的参数列表和返回值与 Lambda 表达式的输入输出一致。
用法
String[] array = {"aaaa", "bbbb", "cccc"};
List<String> list = Arrays.asList(array);
list.forEach(x-> System.out.println(x));
list.forEach(System.out::println(x));
关于可读性问题
大部分人认为 Lambda 表达式存在阅读困难的问题,其实不然,这种流水线的结构恰恰增加了可读性,每一个 Lambda 表达式都可以看作一个执行策略,方法引用反而让你能更加清楚执行了什么策略。
new Random().ints(10)
.map(operand -> {
System.out.println("operand = " + operand);
return operand+1;
})
.forEach(System.out::println);
这种"大肚子"写法的风格是不建议在函数式编程中出现的。最好对大肚子"内容单独提出来封装,做方法引用,