我想用下面示例中的方法引用替换 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 编程语言的其余部分兼容的更小的构造。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)