Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java二进制运算符和工厂方法。如何返回第一个参数?_Java_Lambda_Collections_Java 8_Java Stream - Fatal编程技术网

Java二进制运算符和工厂方法。如何返回第一个参数?

Java二进制运算符和工厂方法。如何返回第一个参数?,java,lambda,collections,java-8,java-stream,Java,Lambda,Collections,Java 8,Java Stream,我试图通过下一个代码将我的流转换为映射: Collectors.toMap(City::key, Function.identity(), (first, second) -> first) 我的问题是关于最后一个lambda (first, second) -> first 我经常需要得到任何元素,或者如果发生碰撞,总是第一个元素。 我明白,这已经是简短而清晰的形式。但仍然如此。对于Function类,我们有工厂方法Function.identity,它按原样返回传递的参数。我

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

Collectors.toMap(City::key, Function.identity(), (first, second) -> first)
我的问题是关于最后一个lambda

(first, second) -> first
我经常需要得到任何元素,或者如果发生碰撞,总是第一个元素。 我明白,这已经是简短而清晰的形式。但仍然如此。对于Function类,我们有工厂方法Function.identity,它按原样返回传递的参数。我们有双函数或二进制运算符的工厂方法吗?或者是接近功能的东西。身份。
我也知道BinaryOperator.minBy和BinaryOperator.maxBy,但它们比Function.identity更详细,也不太清晰。

您可以轻松声明自己的方法:

公共类二进制运算符{ 公共静态二进制运算符优先{ 返回第一,第二->第一; } 公共静态二进制运算符秒{ 返回第一、第二->第二; } 公共静态二进制运算符any{ 返回first,second->ThreadLocalRandom.current.nextBoolean?first:second; } } 然后在代码中使用它们:

Collectors.toMapCity::key、Function.identity、BinaryOperators.first 对于静态导入:

Collectors.toMapCity::key,identity,first 或者不必麻烦上面的代码,使用a,b->a:

toMapCity::键,标识,a,b->a
非常清晰简洁,IMO

嗯,一个简短的临时lambda不够好吗?我不知道有任何这样的方法,但你应该能够提供自己的方法。为什么不试试呢?另外,如果在标准库中没有这样专门的库,那么创建一个新库难道不值得吗?拜托,这些都是琐碎的。据我所知,标准Java库中没有这样的方法。这可能有几个原因,包括1 Java设计人员忘记了,2他们无法从逻辑上决定应该首先返回哪个还是第二个?3他们不同意您关于使用频率的看法,并认为它没有什么价值。是的,我认为您的答案都是正确的,谢谢您的建议。我在标准库中寻找一些东西,但是,很明显,这里没有类似的东西。当然:公共静态二进制操作符让我吃惊{返回a,b->ThreadLocalRandom.current.nextBoolean?a:b;}@mcepender=Wonder。非常感谢。