我有一张 map Map<Id,Map<Obj1,Obj2>> existingMap and List<Obj1> list
;
我需要将列表值添加到映射作为键和新映射作为值。
我尝试做类似的事情:
existingMap.putAll(list.stream().map(x->x.getId()).collect(
Collectors.toMap(x, x -> Map<Obj1,Obj2>::new);
应该怎么写?以及如何使用参数化构造函数来对抗默认值?
最佳答案
尝试:
list.forEach(e -> existingMap.put(e.getId(), new HashMap<>()));
仍然使用 Java 8 的功能特性,效果相同。
for
- 等效循环:
for(Id id : list)
existingMap.put(id.getId(), new HashMap<>());
你的代码有问题:
Map
是一个接口(interface),不能实例化。例如,使用HashMap
或TreeMap
等具体实现。Collectors#toMap
接受两个Function
。如果你想使用你的格式,你需要:Collectors.toMap(x -> x, HashMap::new)
注意 lambda
x -> x
而不是简单的x
。编辑:当然,您可以使用更冗长的
Function.identity()
,而不是x -> x
,但是这取决于您的需要 < em>可能更具表现力。
关于Java 8 列表到现有 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42937373/