我想使用java8流合并内部列表,如下所示:
什么时候
List<List<Integer>> mainList = new ArrayList<List<Integer>>();
mainList.add(Arrays.asList(0,1));
mainList.add(Arrays.asList(0,1,2));
mainList.add(Arrays.asList(1,2));
mainList.add(Arrays.asList(3));
Run Code Online (Sandbox Code Playgroud)
应该合并成
[[0,1,2],[3]];
Run Code Online (Sandbox Code Playgroud)
什么时候
List<List<Integer>> mainList = new ArrayList<List<Integer>>();
mainList.add(Arrays.asList(0,2));
mainList.add(Arrays.asList(1,4));
mainList.add(Arrays.asList(0,2,4));
mainList.add(Arrays.asList(3,4));
mainList.add(Arrays.asList(1,3,4));
Run Code Online (Sandbox Code Playgroud)
应该合并成
[[0,1,2,3,4]];
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我所做的
static void mergeCollections(List<List<Integer>> collectionTomerge) {
boolean isMerge = false;
List<List<Integer>> mergeCollection = new ArrayList<List<Integer>>();
for (List<Integer> listInner : collectionTomerge) {
List<Integer> mergeAny = mergeCollection.stream().map(
lc -> lc.stream().filter(listInner::contains)
).findFirst()
.orElse(null)
.collect(Collectors.toList());
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个例外:
Exception in thread "main" java.lang.NullPointerException
at linqArraysOperations.LinqOperations.mergeCollections(LinqOperations.java:87)
Run Code Online (Sandbox Code Playgroud)
更新了我的答案版本
这就是我想要实现的目标,但Tagir的好回答是没有递归
我通过使用Tagir回答没有平面地图的逻辑,在Mikhaal的回答中做了一些改变
public static <T> List<List<T>> combineList(List<List<T>> argList) {
boolean isMerge = …Run Code Online (Sandbox Code Playgroud)