Обмен значений хэш-карты на ключи - PullRequest
0 голосов
/ 01 октября 2019

У меня есть хэш-карта

{
k1 = {v1, v2},
k2 = {v2},
k3 = {v1}
}

, и мое требование состоит в том, чтобы создать новую хэш-карту со значениями на старой карте в качестве ключей и ключами в виде списка значений. Новый hasmap будет выглядеть как

{
v1 = {k1, k3},
v2 = {k1, k2}
}

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Если у вас есть 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);
0 голосов
/ 01 октября 2019

Я воссоздал твой пример, и это должно делать то, что ты хочешь. Если есть какие-либо другие вопросы относительно кода, дайте мне знать.

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);
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...