如何使用流创建HashMap并覆盖重复项?

9

我正在使用Java8的stream API创建一个HashMap,代码如下:

Map<Integer, String> map = dao.findAll().stream()
    .collect(Collectors.toMap(Entity::getType, Entity::getValue));

现在,如果向已存在的键添加元素,则我只想保留列表中现有的元素并跳过其他元素。我该如何实现这一点?可能需要利用toMap()中的BinaryOperation,但是否能提供一个特定情况的示例呢?

1
你看过文档了吗?因为他们提供了一个例子:https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#toMap-java.util.function.Function-java.util.function.Function-java.util.function.BinaryOperator- - Alexis C.
1个回答

9

是的,您需要使用BinaryOperation<U>作为Collectors.toMap()的第三个参数。

如果出现冲突(已经存在的键),您可以在oldValue(现有的值)和newValue之间进行选择。在代码示例中,我们始终采用oldValue的值。但是您可以自由地对这两个值进行其他操作(取较大的值,合并两个值等)。

以下示例显示了一种可能的解决方案,其中现有值始终保留在映射中:

Map<Integer, String> map = dao.findAll().stream()
     .collect(Collectors.toMap(Entity::getType, Entity::getValue, (oldValue, newValue) -> oldValue));

请参考文档了解另一个示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接