如何使用流覆盖重复创建 HashMap?
How to create HashMap with streams overriding duplicates?
我正在使用 java8 stream
API 创建 HashMap
如下:
Map<Integer, String> map = dao.findAll().stream()
.collect(Collectors.toMap(Entity::getType, Entity::getValue));
现在,如果将一个元素添加到键已存在的集合中,我只想保留列表中的现有元素并跳过
附加元素。我怎样才能做到这一点?可能我必须使用 BinaryOperation<U>
of toMap()
,但谁能提供
我的具体案例的例子?
是的,您需要 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 以获取另一个示例。
我正在使用 java8 stream
API 创建 HashMap
如下:
Map<Integer, String> map = dao.findAll().stream()
.collect(Collectors.toMap(Entity::getType, Entity::getValue));
现在,如果将一个元素添加到键已存在的集合中,我只想保留列表中的现有元素并跳过
附加元素。我怎样才能做到这一点?可能我必须使用 BinaryOperation<U>
of toMap()
,但谁能提供
我的具体案例的例子?
是的,您需要 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 以获取另一个示例。