为了账号安全,请及时绑定邮箱和手机立即绑定

将哈希映射值交换为键

将哈希映射值交换为键

守候你守候我 2023-09-13 18:09:09
我有一个哈希图{k1 = {v1, v2},k2 = {v2},k3 = {v1}}我的要求是构建一个新的哈希映射,其中旧映射中的值作为键,键作为值列表。新的 hasmap 看起来像{v1 = {k1, k3},v2 = {k1, k2}}
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我重新创建了您的示例,这应该可以满足您的要求。如果对代码还有任何其他问题,请告诉我。


HashMap<String,List<String>> hashMap = new HashMap<>();


    hashMap.put("k1", Arrays.asList("v1","v2"));

    hashMap.put("k2", Arrays.asList("v2"));

    hashMap.put("k3", Arrays.asList("v1"));


    HashMap<String,List<String>> result = new HashMap<>();


    hashMap.forEach((s, strings) ->{

        for (String element : strings){

            List<String> tempList = new ArrayList<>();


            if(result.containsKey(element)){

                tempList = result.get(element);

            }


            tempList.add(s);

            result.put(element, tempList);

        }

    });


查看完整回答
反对 回复 2023-09-13
?
UYOU

TA贡献1878条经验 获得超4个赞

假设你有一个Map<String,List<String>> myMap = ...


    Map<String,List<String>> reversed = 

            myMap.values().stream().flatMap(List::stream).distinct()

            .map(v ->  new AbstractMap.SimpleEntry<>(v,

                                    myMap.entrySet().stream()

                                    .filter(e -> e.getValue().contains(v))

                                    .map(Map.Entry::getKey)

                                    .collect(Collectors.toList())))

            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

    System.out.println(reversed);


查看完整回答
反对 回复 2023-09-13
  • 2 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信