簡體   English   中英

BiFunction的左右身份?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM