2

我正在使用 java 8 流将 HashMap 转换为 LinkedHashMap。我有以下代码:

    final LinkedHashMap<String, Employee> collect = map.entrySet().stream()
            .sorted(Comparator.comparing(o -> o.getValue().getName()))
            .collect(Collectors.toMap(e -> e.getKey(), v -> v.getValue(), (o, o2) -> o, LinkedHashMap::new));

一切都很清楚,但是 toMap 方法的最后一个参数让我很困惑。

(o, o2) -> o, LinkedHashMap::new)

据我了解,这是一个 binaryOperator,但我无法理解它是如何工作的以及 'o' 的含义o, LinkedHashMap::new

谁能帮助我理解它或任何更好的方法来实现这一点?

4

1 回答 1

2

(o, o2) -> o是第三个参数

正如文件所说

@param mergeFunction 一个合并函数,用于解决 * 与同一键关联的值之间的冲突,如提供给 {@link Map#merge(Object, Object, BiFunction)}

这意味着如果您有冲突,您只保留o. 您不关心其他冲突对象o2。因此oo2同一个键存在两个冲突的值。

于 2021-03-13T21:47:19.970 回答