首页 > 解决方案 > 何时在 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() 的重要性。

谢谢

标签: javalambdajava-8functional-programming

解决方案


当 API强制你传递一个函数但你想要的只是保留原始值时,它很有用。

例如,假设你有一个Stream<Country>,并且你想把它变成一个Map<String, Country>。你会用

stream.collect(Collectors.toMap(Country::getIsoCode, Function.identity()))

Collectors.toMap()期望一个函数将 Country 转换为地图的键,并期望另一个函数将其转换为地图的值。由于您想将国家/地区本身存储为值,因此您使用身份功能。


推荐阅读