gpt4 book ai didi

java - 方法引用与 lambda 表达式

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:29 25 4
gpt4 key购买 nike

我想在下面的例子中用方法引用替换 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 编程语言的其余部分兼容的更小的结构。

关于java - 方法引用与 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40215509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com