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

mem*_*und 9 java java-8 java-stream

我正在创建一个HashMap使用java8 streamAPI,如下所示:

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

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

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

我的具体案例的一个例子?

ret*_*eto 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));
Run Code Online (Sandbox Code Playgroud)

有关其他示例,请参阅文档.