【发布时间】:2020-07-03 10:49:56
【问题描述】:
我不明白为什么String::toUpperCase() 表达式在流map 管道 中可以正常工作。当我在这里看这个例子时:
Stream.of("test1", "test2", "test3", "test4")
.filter(s -> s.contains("r"))
.map(s -> s + "map")
.map(String::toUpperCase)
.forEach(System.out::println);
当我查看下面示例map(Function<? super String, ? extends String> mapper) 中使用的映射运算符的定义时,我看到使用了函数设计模式。
在这个例子中.map(s -> s + "map") 很好,据我了解,我们正在寻找更精确的函数 R apply(T t);,这完全是 lambda 表达式所说的 s -> s + "map" 这里我们有一个带有参数 s 的函数,它返回s + String "map" 并且它符合这个规范。 T 和 R,他们在场。
另一边第二个map(String::toUpperCase),我不明白为什么toUpperCase这个表达式被认为是Function接口,我要注意这个函数的核心是这样的
public String toUpperCase() {
return toUpperCase(Locale.getDefault());
}
我们正在寻找R apply(T t); 这个方法中没有T 参数toUpperCase?为什么这个有效?
【问题讨论】:
标签: java java-8 functional-programming java-stream mapping