首页 > 解决方案 > java - 如何在java中使用可变参数加入多个列表?

问题描述

我想加入几个列表使用Stream API

我在 stackoverflow 找到了一个有用的例子:

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] 

好的。但就我而言,我无法确定使用这个 Stream.of() 的列表有多少。

我想过在 jdk8 上使用可变参数。像这样

public List<Integer> getNewList(List... list) {
    List<Integer> newList = 
         Stream.of(list)
               .flatMap(Collection::stream)
               .collect(Collectors.toList());
    return newList;
}

getNewList(list1, list2, list3, list...) 

不幸的是,它没有很好地工作。有没有办法使这项工作?

标签: javacollectionsjava-8java-stream

解决方案


您应该指定List您作为 var args 传递的参数的类型,您也可以使用Arrays.stream而不是Stream.of

 public static List<Integer> getNewList(List<Integer>... list){
    return Arrays.stream(list)
            .flatMap(List::stream)
            .collect(Collectors.toList());
}

推荐阅读