看看this功能。此函数接受两个参数并返回它传递的第一个参数。这样的功能怎么可能有用呢?
答案 0 :(得分:1)
我可以想到一个场景:
假设您有一些某些对象的流,并将它们收集到Map
中。某些Collectors.toMap()
变体具有合并函数参数,用于处理合并重复键。即如果相同的键具有多个值,则合并功能确定将与该键关联的值。
public static <T, K, U>
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction)
正如您所看到的,merge函数是一个BinaryOperator<U>
- 一个函数,它接受两个相同类型的参数并返回相同类型的结果。
如果你想要一个总是使用与给定键相关联的第一个值的合并函数,并忽略任何后面的值,你需要一个接收两个参数并返回第一个参数的函数。当然,可以使用简单的lambda表达式(v1,v2)->v1
轻松编写这样的函数,因此您不必定义一个显式方法来执行此操作。
答案 1 :(得分:0)
在某些情况下,需要将两个或多个值合并为一个。如果“合并”并不是指除了选择其中一个值之外的任何其他内容,那么可能需要这样的功能。
看看这个捏造的例子:
Map<String, Integer> map = IntStream.range(0, 20)
.mapToObj(i -> String.valueOf( i % 3))
.collect(Collectors.toMap(
Function.identity(),
String::length,
(a, b) -> a)
);
根据Collectors.toMap
,mergeFunction
“用于解决与提供给Map.merge(Object,Object,BiFunction)相同的键关联的值之间的冲突”。所以在这个假设的要求中,结果{0=1, 1=1, 2=1}
很好(找到每个余数除以3的结果的任何整数)。
在上面整数流的逻辑中,我只需要按键找到任何元素,所以只选择一个元素的函数就可以了。