zoukankan      html  css  js  c++  java
  • 实现二:Map<Long, List<Long>> 存放的value 可能含有重复元素,将value 中含有重复元素的Map 重新组合

    举例:

    Map<Long, List<Long>> map = new HashMap<>(16);
    List<Long> list1 = new ArrayList<>();
    list1.add(1L);
    list1.add(2L);
    List<Long> list2 = new ArrayList<>();
    list2.add(2L);
    list2.add(3L);
    List<Long> list3 = new ArrayList<>();
    list3.add(3L);
    list3.add(4L);
    List<Long> list4 = new ArrayList<>();
    list4.add(5L);
    list4.add(6L);
    List<Long> list5 = new ArrayList<>();
    list5.add(6L);
    list5.add(7L);
    map.put(1L,list1);
    map.put(2L,list2);
    map.put(3L,list3);
    map.put(4L,list4);
    map.put(5L,list5);
    Map<List<Long>,List<Long>> map2 = new HashMap<>(16);

    list1,list2,list3 含有重复元素 ,map2中key ->list 放map中list1,list2,list3对应的key的集合[1,2,3],value->list 放 list1,list2,list3去重后的list[1,2,3,4]。

    期望结果: map2: key:[1,2,3] value:[1,2,3,4]; key:[4,5] value:[5,6,7]

    实现方法:

     1 public class Test2 {
     2 
     3     public static void main(String[] args) {
     4         Map<Long, List<Long>> map = new LinkedHashMap<>(16);
     5         List<Long> list1 = new ArrayList<>();
     6         list1.add(1L);
     7         list1.add(2L);
     8         List<Long> list2 = new ArrayList<>();
     9         list2.add(2L);
    10         list2.add(3L);
    11         List<Long> list3 = new ArrayList<>();
    12         list3.add(3L);
    13         list3.add(4L);
    14         List<Long> list4 = new ArrayList<>();
    15         list4.add(9L);
    16         list4.add(6L);
    17         List<Long> list5 = new ArrayList<>();
    18         list5.add(6L);
    19         list5.add(7L);
    20         List<Long> list6 = new ArrayList<>();
    21         list6.add(10L);
    22         list6.add(11L);
    23         List<Long> list7 = new ArrayList<>();
    24         list7.add(4L);
    25         list7.add(55L);
    26         List<Long> list8 = new ArrayList<>();
    27         list8.add(5L);
    28         list8.add(55L);
    29         List<Long> list9 = new ArrayList<>();
    30         list9.add(99L);
    31         list9.add(88L);
    32         list9.add(11L);
    33 
    34         map.put(1L, list1);
    35         map.put(2L, list2);
    36         map.put(3L, list3);
    37         map.put(4L, list4);
    38         map.put(5L, list5);
    39         map.put(6L, list6);
    40         map.put(7L, list7);
    41         map.put(8L, list8);
    42         map.put(9L, list9);
    43 
    44         List<Long> mergedValue = new ArrayList<>();
    45         List<Long> keyLists = new ArrayList<>(map.keySet());
    46         Map<List<Long>, List<Long>> newMap = new HashMap<>(16);
    47 
    48         while (keyLists.size() > 0) {
    49             List<Long> valueList = map.get(keyLists.get(0));
    50             List<Long> keyList = new ArrayList<>();
    51             keyList.add(keyLists.get(0));
    52             map.remove(keyLists.get(0));
    53             keyLists.remove(keyLists.get(0));
    54             boolean merged = true;
    55             while (merged) {
    56                 merged = false;
    57                 List<List<Long>> mergingList = new ArrayList<>();
    58                 for (Long value : valueList) {
    59                     if (mergedValue.contains(value)) {
    60                         continue;
    61                     }
    62                     mergedValue.add(value);
    63                     Iterator<Map.Entry<Long, List<Long>>> iterator = map.entrySet().iterator();
    64                     while (iterator.hasNext()) {
    65                         Map.Entry<Long, List<Long>> entry = iterator.next();
    66                         Long entryKey = entry.getKey();
    67                         List<Long> entryValue = entry.getValue();
    68                         if (entryValue.contains(value)) {
    69                             mergingList.add(entryValue);
    70                             keyList.add(entryKey);
    71                             iterator.remove();
    72                             keyLists.remove(entryKey);
    73                             merged = true;
    74                         }
    75                     }
    76                 }
    77                 mergingList.forEach(valueList::addAll);
    78             }
    79             newMap.put(keyList, valueList.stream().distinct().collect(Collectors.toList()));
    80         }
    81         System.out.println(newMap);
    82     }
    83 }

    实现结果:{[1, 2, 3, 7, 8]=[1, 2, 3, 4, 55, 5], [4, 5]=[9, 6, 7], [6, 9]=[10, 11, 99, 88]}

  • 相关阅读:
    python的基本数据类型
    python数据基本运算处理===循环
    多态、多态性和鸭子类型
    菱形问题、类的组合
    类的继承
    面向对象基础
    软件开发三层架构
    logging模块
    json与pickle模块
    Webbrowser模拟百度一下子点击事件
  • 原文地址:https://www.cnblogs.com/wlong-blog/p/14252425.html
Copyright © 2011-2022 走看看