【发布时间】:2015-03-17 22:37:06
【问题描述】:
我对@987654321@ 方法的用法有疑问。
想象一下下面的代码:
Arrays.asList("a", "b", "c")
.stream()
.map(Function.identity()) // <- This,
.map(str -> str) // <- is the same as this.
.collect(Collectors.toMap(
Function.identity(), // <-- And this,
str -> str)); // <-- is the same as this.
您有什么理由应该使用Function.identity() 而不是str->str(反之亦然)。我认为第二个选项更具可读性(当然是口味问题)。但是,是否有任何“真正”的理由应该首选一个?
【问题讨论】:
-
最终,不,这不会有什么不同。
-
两者都可以。选择你认为更具可读性的那个。 (别担心,开心就好。)
-
我更喜欢
t -> t,因为它更简洁。 -
有点不相关的问题,但是有谁知道为什么语言设计者让 identity() 返回 Function 的实例而不是 T 类型的参数并返回它,以便该方法可以与方法引用一起使用?
-
恒等函数是一个众所周知的数学术语;我们选择依靠现有的理解。
标签: java lambda java-8 java-stream