举例:一组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]