举例:
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]
实现方法:
public class Test2 {
public static void main(String[] args) {
Map<Long, List<Long>> map = new LinkedHashMap<>(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(9L);
list4.add(6L);
List<Long> list5 = new ArrayList<>();
list5.add(6L);
list5.add(7L);
List<Long> list6 = new ArrayList<>();
list6.add(10L);
list6.add(11L);
List<Long> list7 = new ArrayList<>();
list7.add(4L);
list7.add(55L);
List<Long> list8 = new ArrayList<>();
list8.add(5L);
list8.add(55L);
List<Long> list9 = new ArrayList<>();
list9.add(99L);
list9.add(88L);
list9.add(11L);
map.put(1L, list1);
map.put(2L, list2);
map.put(3L, list3);
map.put(4L, list4);
map.put(5L, list5);
map.put(6L, list6);
map.put(7L, list7);
map.put(8L, list8);
map.put(9L, list9);
List<Long> mergedValue = new ArrayList<>();
List<Long> keyLists = new ArrayList<>(map.keySet());
Map<List<Long>, List<Long>> newMap = new HashMap<>(16);
while (keyLists.size() > 0) {
List<Long> valueList = map.get(keyLists.get(0));
List<Long> keyList = new ArrayList<>();
keyList.add(keyLists.get(0));
map.remove(keyLists.get(0));
keyLists.remove(keyLists.get(0));
boolean merged = true;
while (merged) {
merged = false;
List<List<Long>> mergingList = new ArrayList<>();
for (Long value : valueList) {
if (mergedValue.contains(value)) {
continue;
}
mergedValue.add(value);
Iterator<Map.Entry<Long, List<Long>>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Long, List<Long>> entry = iterator.next();
Long entryKey = entry.getKey();
List<Long> entryValue = entry.getValue();
if (entryValue.contains(value)) {
mergingList.add(entryValue);
keyList.add(entryKey);
iterator.remove();
keyLists.remove(entryKey);
merged = true;
}
}
}
mergingList.forEach(valueList::addAll);
}
newMap.put(keyList, valueList.stream().distinct().collect(Collectors.toList()));
}
System.out.println(newMap);
}
}
实现结果:{[1, 2, 3, 7, 8]=[1, 2, 3, 4, 55, 5], [4, 5]=[9, 6, 7], [6, 9]=[10, 11, 99, 88]}