列表列表的交集 java
Intersection of list of lists java
我试图找到 Java 中两个列表列表的交集。
例如,
list1 = [[1][2][3][7][4,5,6][8,9][10]]
list2 = [[1][2][3,7,8][4,5,10][6,9]]
两个列表的交集必须是 [[1][2][3][7][4,5][6][8][9][10]]
这是因为如果我们扫描 list1 中的第四个元素,它是 [4,5,6] ,而在 list2 中,我们有 [4,5] 在一个列表中, [6] 在一个单独的子列表中。因此,list1 中的子列表 [4,5,6]
在交集后被分成 [4,5] 和 [6]。
感谢任何帮助!!
流式处理方式:
List<List<Integer>> l1
= Arrays.asList(
Arrays.asList(1),
Arrays.asList(2),
Arrays.asList(3),
Arrays.asList(7),
Arrays.asList(4, 5, 6),
Arrays.asList(8, 9),
Arrays.asList(10));
List<List<Integer>> l2
= Arrays.asList(
Arrays.asList(1),
Arrays.asList(2),
Arrays.asList(3, 7, 8),
Arrays.asList(4, 5, 10),
Arrays.asList(6, 9));
List<List<Integer>> intersect
= l1.stream()
.flatMap(sl1 -> l2.stream().map(sl2 -> {
List<Integer> lout = new ArrayList<>();
lout.addAll(sl1);
lout.retainAll(sl2);
return lout;
}))
.filter(l -> l.size() > 0)
.distinct()
.collect(Collectors.toList());
我试图找到 Java 中两个列表列表的交集。
例如,
list1 = [[1][2][3][7][4,5,6][8,9][10]]
list2 = [[1][2][3,7,8][4,5,10][6,9]]
两个列表的交集必须是 [[1][2][3][7][4,5][6][8][9][10]]
这是因为如果我们扫描 list1 中的第四个元素,它是 [4,5,6] ,而在 list2 中,我们有 [4,5] 在一个列表中, [6] 在一个单独的子列表中。因此,list1 中的子列表 [4,5,6]
在交集后被分成 [4,5] 和 [6]。
感谢任何帮助!!
流式处理方式:
List<List<Integer>> l1
= Arrays.asList(
Arrays.asList(1),
Arrays.asList(2),
Arrays.asList(3),
Arrays.asList(7),
Arrays.asList(4, 5, 6),
Arrays.asList(8, 9),
Arrays.asList(10));
List<List<Integer>> l2
= Arrays.asList(
Arrays.asList(1),
Arrays.asList(2),
Arrays.asList(3, 7, 8),
Arrays.asList(4, 5, 10),
Arrays.asList(6, 9));
List<List<Integer>> intersect
= l1.stream()
.flatMap(sl1 -> l2.stream().map(sl2 -> {
List<Integer> lout = new ArrayList<>();
lout.addAll(sl1);
lout.retainAll(sl2);
return lout;
}))
.filter(l -> l.size() > 0)
.distinct()
.collect(Collectors.toList());