java – 方法引用vs lambda表达式
作者:互联网
我想通过以下示例中的方法引用替换lambda表达式:
public class Example {
public static void main(String[] args) {
List<String> words = Arrays.asList("toto.", "titi.", "other");
//lambda expression in the filter (predicate)
words.stream().filter(s -> s.endsWith(".")).forEach(System.out::println);
}
}
我想写一下这样的东西:
words.stream().filter(s::endsWith(".")).forEach(System.out::println);
是否可以将任何lambda表达式转换为方法引用.
解决方法:
没有办法“将任何lambda表达式转换为方法引用”,但您可以为特定目标类型实现工厂,如果这样可以满足重复需求:
public static <A,B> Predicate<A> bind2nd(BiPredicate<A,B> p, B b) {
return a -> p.test(a, b);
}
有了这个,你可以写
words.stream().filter(bind2nd(String::endsWith, ".")).forEach(System.out::println);
但实际上,没有优势.从技术上讲,lambda表达式完全符合您的要求,它是最小的必要参数转换代码,表示为lambda表达式的主体,编译为合成方法和对该合成代码的方法引用.语法
s – > s.endsWith(“.”)也已经是表达该意图的最小语法.我怀疑你能找到一个仍然与Java编程语言的其余部分兼容的小构造.
标签:method-reference,java,java-8,lambda 来源: https://codeday.me/bug/20190823/1702671.html