[英]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.