如何使用流重写重复项来创建HashMap?

时间:2015-03-24 16:33:47

标签: java java-8 java-stream

我使用java8 HashMap API创建stream,如下所示:

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

现在,如果将一个元素添加到密钥已存在的集合中,我只想将现有元素保留在列表中并跳过

附加元素。我怎样才能做到这一点?可能我必须使用BinaryOperation<U> toMap(),但任何人都可以提供

我具体案例的一个例子?

1 个答案:

答案 0 :(得分: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));

有关其他示例,请参阅documentation