我正在寻找以下地图的便捷创建方法。我有一个包含此类字段的对象(示例)
Object1: Set<String> supportedKeys = {A, B, C};
Object2: Set<String> supportedKeys = {D};
我想要一张这样的地图:
{A, Object1} {B, Object1} {C, Object1} {D, Object2}
我是这样做的
object1.supportedKeys.forEach(k->map.put(k, object1))
object2.supportedKeys.forEach(k->map.put(k, object2))
但是我觉得有一种更有效的方法。
答案 0 :(得分:0)
给定List
(或任何Collection
)个对象,您可以Stream
遍历元素,使用flatMap
生成键和值对并收集到Map
。
这可以在单个语句中完成,无论对象的数量如何。
List.of(object1,object2)
.stream()
.flatMap(o -> o.supportedKeys
.stream()
.map(k -> new SimpleEntry<>(k,o)))
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));