小编Moh*_*air的帖子

使用java8 Streams合并列表中的内部列表

我想使用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)

java-8 java-stream

4
推荐指数
1
解决办法
970
查看次数

标签 统计

java-8 ×1

java-stream ×1