我使用java8 HashMap
API创建stream
,如下所示:
Map<Integer, String> map = dao.findAll().stream()
.collect(Collectors.toMap(Entity::getType, Entity::getValue));
现在,如果将一个元素添加到密钥已存在的集合中,我只想将现有元素保留在列表中并跳过
附加元素。我怎样才能做到这一点?可能我必须使用BinaryOperation<U>
toMap()
,但任何人都可以提供
我具体案例的一个例子?
答案 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。