实现一:多个List 可能含有重复元素,含有重复元素的集合重新组合

举例:一组list [ [1,2],[2,3],[3,4],[5,6],[6,7],[8,9] ]

           [1,2],[2,3],[3,4] 含有重复元素 组合为:[1,2,3,4]

     [5,6],[6,7] 含有重复元素 组合为:[5,6,7]

   [8,9] 不含重复元素 组合为[8,9] 

思路:获取list第一个值,把第一个list 的每个值和其余每个list 比较判断其他list 是否包含第一个list 中的元素,如果包含则移除该list ,依次比较剩余的list 。

实现方法:

 1 public class Test {
 2 
 3     public static void main(String[] args) {
 4         List<List<Long>> lists = new ArrayList<List<Long>>() {
 5             {
 6                 add(new ArrayList<>(Arrays.asList(1L, 3L)));
 7                 add(new ArrayList<>(Arrays.asList(2L, 3L)));
 8                 add(new ArrayList<>(Arrays.asList(3L, 4L)));
 9                 add(new ArrayList<>(Arrays.asList(5L, 6L)));
10                 add(new ArrayList<>(Arrays.asList(7L, 8L)));
11                 add(new ArrayList<>(Arrays.asList(9L, 11L)));
12                 add(new ArrayList<>(Arrays.asList(4L, 7L, 0L)));
13             }
14         };
15 
16         List<List<Long>> results = new ArrayList<>();
17         List<Long> mergedValue = new ArrayList<>();
18 
19         while (lists.size() > 0) {
20             List<Long> result = lists.get(0);
21             results.add(result);
22             lists.remove(0);
23             boolean merged = true;
24             while (merged) {
25                 merged = false;
26                 List<List<Long>> mergingList = new ArrayList<>();
27                 for (Long value : result) {
28                     if (mergedValue.contains(value)) {
29                         continue;
30                     }
31                     mergedValue.add(value);
32                     Iterator<List<Long>> iter = lists.iterator();
33                     while (iter.hasNext()) {
34                         List<Long> values = iter.next();
35                         if (values.contains(value)) {
36                             mergingList.add(values);
37                             iter.remove();
38                             merged = true;
39                         }
40                     }
41                 }
42                 mergingList.forEach(result::addAll);
43             }
44         }
45         results.forEach(result->{
46             System.out.println(result.stream().distinct().collect(Collectors.toList()));
47         });
48     }
49 }

实现结果:

[1, 3, 2, 4, 7, 0, 8]
[5, 6]
[9, 11]

原文地址:https://www.cnblogs.com/wlong-blog/p/14252369.html