[英]Left and Right identity of a BiFunction?
当我从 stream 创建 Map 时,我使用:
Map<Bar, Foo> fooBar = stream
.collect(Collectors.toMap(
Foo::getBar,
Function.identity(),
(x, y) -> x
));
我需要的合并 function 只是第一个。 我们有Function.identity()
可以作为 lambda 传递。 BiFunction
是否有类似的东西,例如BiFunction.left()
? 外部库也可以工作。
不,这是最简单,最有效的,完全按照你所做的。 (老实说, x -> x
通常也比Function.identity()
更简单、更清晰。)
如果您查看BinaryOperator
的文档,您会发现它定义的唯一方法是maxBy()
和minBy()
。 它还从BiFunction
继承了apply()
和andThen()
。
没有什么类似于您正在寻找的东西。
如果你觉得你真的需要这样的方法left()
你可以扩展BinaryOperator
并定义一个:
public interface MyBinaryOperator<T> extends BinaryOperator<T> {
static <T> BinaryOperator<T> left() {
return (left, right) -> left;
}
}
适用于您的示例:
foos.stream()
.collect(Collectors.toMap(
Foo::getBar,
Function.identity(),
MyBinaryOperator.left()
));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.