java - 何时在 Java 中使用 Identity 函数?
问题描述
已经通过一些代码并遇到了 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;
}
打印带有和不带有映射的列表元素时,我得到相同的结果:
a
b
c
那么,包含传递字符串和检索字符串的 s-> s 的目的是什么?Function.identity() 的目的是什么?
请给我一个更好的例子,也许这个例子无法证明使用 identity() 的重要性。
谢谢
解决方案
当 API强制你传递一个函数但你想要的只是保留原始值时,它很有用。
例如,假设你有一个Stream<Country>
,并且你想把它变成一个Map<String, Country>
。你会用
stream.collect(Collectors.toMap(Country::getIsoCode, Function.identity()))
Collectors.toMap()
期望一个函数将 Country 转换为地图的键,并期望另一个函数将其转换为地图的值。由于您想将国家/地区本身存储为值,因此您使用身份功能。
推荐阅读
- android - 如果我的应用暂停时间过长,我该如何刷新它
- c# - 背景颜色计时器 Xamarin 表单
- cassandra - “Cassandra 在针对单个分区进行批量突变时提供原子性和隔离性”的含义
- lua - 在游戏对象脚本中调整碰撞对象的形状
- regex - 无法为用户名生成正则表达式
- python - 是否有替代 stats.zscore 来检测数据框中少于 10 行的异常值?
- angular - Angular 服务中的providedIn 属性不起作用
- node.js - Node.js - 为每个目录导出 index.js 中的所有文件是一个好习惯吗?
- amazon-web-services - 错误:撰写文件“./docker-compose.yml”无效,因为:services.jenkins.networks 包含无效类型
- api-platform.com - 使用 GraphQL 在 ApiPlatform 上使用自定义解析器/数据提供程序返回集合