java 8将多个键映射到相同的值

时间:2020-08-25 10:38:51

标签: java dictionary java-8 java-stream key

我正在寻找以下地图的便捷创建方法。我有一个包含此类字段的对象(示例)

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))

但是我觉得有一种更有效的方法。

1 个答案:

答案 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));