首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Java 8反向映射<String,List<String>>

使用Java 8反向映射<String,List<String>>
EN

Stack Overflow用户
提问于 2019-10-01 04:32:41
回答 2查看 1K关注 0票数 1

我需要使用java 8将<String, List<String>>映射为Map<String,String>,并假定值是唯一的。例如,

输入地图-

代码语言:javascript
复制
{"Fruit" -> ["apple","orange"], "Animal" -> ["Dog","Cat"]}

输出图

代码语言:javascript
复制
{"apple" -> "Fruit", "orange" -> "Fruit", "Dog"->"Animal", "Cat" -> "Animal"}
代码语言:javascript
复制
Map <String, String> outputMap = new HashMap<>();
for (Map.Entry<String, List<String>> entry : inputMap.entrySet()) {
    entry.getValue().forEach(value -> outputMap.put(value, entry.getKey()));
}   

是这样的吗?我们可以使用streams java 8来实现这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-02 08:16:24

你试试这边

代码语言:javascript
复制
Map <String, String> updatedMap = new HashMap<>();
oldMap.keySet()
      .forEach(i -> oldMap.get(i)
                          .forEach(k -> updatedMap.put(k, i)));
票数 0
EN

Stack Overflow用户

发布于 2019-10-01 09:08:25

就像这样:

代码语言:javascript
复制
public class InverterMap {
    public static void main(String[] args) {

        Map<String, List<String>> mp = new HashMap<String, List<String>>();
        mp.put("Fruit", Arrays.asList("Apple", "Orange"));
        mp.put("Animal", Arrays.asList("Dog", "Cat"));
        System.out.println(mp);  // It returned {Fruit=[Apple, Orange], Animal=[Dog, Cat]}

        Map<String, String> invertMap = mp.entrySet().stream().collect(HashMap::new,
            (m, v) -> v.getValue().forEach(k -> m.put(k, v.getKey())), Map::putAll);

        System.out.println(invertMap);// It returned {Apple=Fruit, Cat=Animal, Orange=Fruit, Dog=Animal}

    }

}

阅读Stream.collect(供应商,BiConsumer,BiConsumer组合器)获取更多信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58178078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档