Jua*_*rez 1 java lambda functional-programming java-8
通过一些代码,并遇到Function.identity(),我发现它类似于s-> s。我不明白为什么以及何时应该使用Function.identity()。
我试图通过一个例子来理解,但是并没有阐明我的问题:
public static void main(String[] args){
Arrays.asList("a", "b", "c")
.stream()
.map(Function.identity())
//.map(str -> str) //it is the same as identity()
.forEach(System.out::println);
return;
}
Run Code Online (Sandbox Code Playgroud)
当打印带有和不带有映射的列表元素时,我得到相同的结果:
a
b
c
Run Code Online (Sandbox Code Playgroud)
那么,包含s-> s的目的是传递字符串并检索字符串吗?Function.identity()的目的是什么?
请给我提供一个更好的示例,也许这个示例对证明使用identity()的重要性没有意义。
谢谢
当API 强制您传递函数时,此功能很有用,但您想要保留的只是原始值。
例如,假设您有一个Stream<Country>,并且想要将其转换为Map<String, Country>。你会用
stream.collect(Collectors.toMap(Country::getIsoCode, Function.identity()))
Run Code Online (Sandbox Code Playgroud)
Collectors.toMap()希望有一个函数可以将“国家/地区”变成地图的键,而另一个函数是将其变成地图的值。由于您想将国家本身存储为值,因此可以使用身份功能。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |