Vol*_*ozo 0 java collections lambda java-8 java-stream
我试图通过下一个代码将我的流转换为映射:
Collectors.toMap(City::key, Function.identity(), (first, second) -> first)
Run Code Online (Sandbox Code Playgroud)
我关于最后一个 lambda 的问题。
(first, second) -> first
Run Code Online (Sandbox Code Playgroud)
如果发生碰撞,我经常需要获取任何元素或始终获取第一个元素。我明白,这已经是简短而清晰的形式。但是还是。对于Function
类,我们有工厂方法Function.identity()
,它按原样返回传递的参数。我们有 forBiFunction
或 for的工厂方法BinaryOperator
吗?或者可能是接近Function.identity()
. 我也知道BinaryOperator.minBy()
和BinaryOperator.maxBy()
,但他们更“详细”,而不是比如此清晰的方法Function.identity()
。
您可以轻松声明自己的方法:
public class BinaryOperators {
public static <T> BinaryOperator<T> first() {
return (first, second) -> first;
}
public static <T> BinaryOperator<T> second() {
return (first, second) -> second;
}
public static <T> BinaryOperator<T> any() {
return (first, second) -> ThreadLocalRandom.current().nextBoolean() ? first : second;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中使用它们:
Collectors.toMap(City::key, Function.identity(), BinaryOperators.first())
Run Code Online (Sandbox Code Playgroud)
静态导入:
Collectors.toMap(City::key, identity(), first())
Run Code Online (Sandbox Code Playgroud)
或者只是不要打扰上面的代码并使用(a, b) -> a
:
toMap(City::key, identity(), (a, b) -> a))
Run Code Online (Sandbox Code Playgroud)
非常清晰简洁,IMO
归档时间: |
|
查看次数: |
98 次 |
最近记录: |