在 Java 中组合多个列表

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/45281454/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 01:57:20  来源:igfitidea点击:

Combine multiple lists in Java

javalist

提问by Fabian R?ling

If I want to make two lists into one in Java, I can use ListUtils.union(List list1,List list2). But what if I want to combine multiple lists?

如果我想在 Java 中将两个列表合二为一,我可以使用ListUtils.union(List list1,List list2). 但是如果我想组合多个列表怎么办?

This works:

这有效:

import org.apache.commons.collections.ListUtils;
List<Integer>list1=Arrays.asList(1,2,3);
List<Integer>list2=Arrays.asList(4,5,6);
List<Integer>list3=Arrays.asList(7,8,9);
List<Integer>list4=Arrays.asList(10,0,-1);
System.out.println(ListUtils.union(ListUtils.union(list1, list2),ListUtils.union(list3, list4)));

But it doesn't really look like the best solution, neither is it particularly great to read. Sadly ListUtils.union(list1,list2,list3,list4)doesn't work. Using addAllmultiple times and creating its own list just for that with duplicates of all the entries also doesn't seem ideal to me. So what can I do instead?

但它看起来并不是最好的解决方案,阅读也不是特别好。可悲的是ListUtils.union(list1,list2,list3,list4)不起作用。addAll多次使用并为所有条目重复创建自己的列表对我来说似乎也不理想。那我该怎么办呢?

采纳答案by Pallavi Sonal

Java 8 has an easy way of doing it with the help of Stream APIshown in the code below. We have basically created a stream with all the lists , and then as we need the individual contents of the lists, there is a need to flatten it with flatMapand finally collect the elements in a List.

Java 8 有一种简单的方法可以在下面的代码中显示的Stream API的帮助下完成。我们基本上已经创建了一个包含所有列表的流,然后由于我们需要列表的各个内容,因此需要将其展平flatMap并最终将元素收集到List.

List<Integer>list1=Arrays.asList(1,2,3);
List<Integer>list2=Arrays.asList(4,5,6);
List<Integer>list3=Arrays.asList(7,8,9);
List<Integer>list4=Arrays.asList(10,0,-1);
List<Integer> newList = Stream.of(list1, list2, list3,list4)
                                      .flatMap(Collection::stream)
                                      .collect(Collectors.toList());       
 System.out.println(newList); // prints [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, -1]

回答by Khan.N

Use an ArrayList to list down all your Lists....

使用 ArrayList 列出所有列表....

ArrayList<String> arrl = new ArrayList<String>();
List<String> list1 = new ArrayList<String>();
    list.add("one");
    list.add("two");
List<String> list2 = new ArrayList<String>();
    list.add("one1");
    list.add("two2");
    arrl.addAll(list1);
arrl.addAll(list2);
    System.out.println("After Copy: "+arrl);

Thats it your list will be made

就是这样你的名单将被制作

回答by Eritrean

You can write your own methods to merge two or more lists. Example:

您可以编写自己的方法来合并两个或多个列表。例子:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test{ 
    public static void main(String[] args) {
        List<Integer>list1 = Arrays.asList(1,2,3);
        List<Integer>list2 = Arrays.asList(4,5,6);
        List<Integer>list3 = Arrays.asList(7,8,9);
        List<Integer>list4 = Arrays.asList(10,0,-1);

        System.out.println(combineMyLists(list1,list2,list3,list4));
        System.out.println("----------------------");
        System.out.println(combineMyLists2(list1,list2,list3,list4));
    } 
    private static List<Integer> combineMyLists(List<Integer>... args) {
        List<Integer> combinedList = new ArrayList<>();
        for(List<Integer> list : args){
            for(Integer i: list){
               combinedList.add(i);
            }
        }
        return combinedList;
    }
    private static List<Integer> combineMyLists2(List<Integer>... args) {
        List<Integer> combinedList = Stream.of(args).flatMap(i -> i.stream()).collect(Collectors.toList());   ;
        return combinedList;
    }
}

回答by Sahil Chhabra

Adding other alternatives:

添加其他替代方案:

OPTION 1:

选项1:

List<Integer> joinedList = joinLists(list1, list2, list3, list4);

public static <T> List<T> joinLists(List<T>... lists) {
        return Arrays.stream(lists).flatMap(Collection::stream).collect(Collectors.toList()); 
}

OPTION 2:

选项 2:

List<Integer> joinedList = new ArrayList<>();
Stream.of(list1, list2, list3, list4).forEach(joinedList::addAll);