JavaBinaryOperator和工厂方法。如何返回第一个参数?

我试图通过下一个代码将我的流转换为映射:

Collectors.toMap(City::key, Function.identity(), (first, second) -> first)

我关于最后一个 lambda 的问题。

(first, second) -> first

如果发生碰撞,我经常需要获取任何元素或始终获取第一个元素。我明白,这已经是简短而清晰的形式。但是还是。对于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;
    }

}

然后在您的代码中使用它们:

Collectors.toMap(City::key, Function.identity(), BinaryOperators.first())

静态导入:

Collectors.toMap(City::key, identity(), first())

或者只是不要打扰上面的代码并使用(a, b) -> a

toMap(City::key, identity(), (a, b) -> a))

非常清晰简洁,IMO

  • And of course: `public static <T> BinaryOperator<T> surpriseMe() { return (a, b) -> ThreadLocalRandom.current().nextBoolean() ? a : b; }`

以上是JavaBinaryOperator和工厂方法。如何返回第一个参数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>