如何在 java 中使用可变参数加入多个列表?
how do I join multiple list with varargs in java?
我想使用 Stream API
加入多个列表。
我在 Whosebug 找到了一个有用的例子:
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...)
不幸的是,它并没有很好地工作。有什么办法可以做到这一点吗?
您应该指定要作为 var args 传递的 List
参数的类型,您也可以使用 Arrays.stream
而不是 Stream.of
public static List<Integer> getNewList(List<Integer>... list){
return Arrays.stream(list)
.flatMap(List::stream)
.collect(Collectors.toList());
}
像这样尝试。使用 Arrays.stream()
通过可变参数语法流式传输列表数组。
public static <T> List<T> getNewList(List<T>... list) {
return Arrays.stream(list).flatMap(Collection::stream)
.collect(Collectors.toList());
}
Arrays.stream
应该可以解决问题:
public static <T> List<T> merge(List<T>... lists) {
return Arrays.stream(lists)
.flatMap(List::stream)
.collect(Collectors.toList());
}
顺便说一句,我刚刚注意到您的解决方案几乎没问题。您唯一需要添加的是 <Integer>
。所以Stream.of
应该也可以。
public List<Integer> getNewList(List<Integer>... list) {
List<Integer> newList =
Stream.of(list)
.flatMap(Collection::stream)
.collect(Collectors.toList());
return newList;
}
事实上,Stream::of
在后台调用 Arrays::stream
。因此,您可以将它们中的任何一个用于您的特定用例。
我想使用 Stream API
加入多个列表。
我在 Whosebug 找到了一个有用的例子:
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...)
不幸的是,它并没有很好地工作。有什么办法可以做到这一点吗?
您应该指定要作为 var args 传递的 List
参数的类型,您也可以使用 Arrays.stream
而不是 Stream.of
public static List<Integer> getNewList(List<Integer>... list){
return Arrays.stream(list)
.flatMap(List::stream)
.collect(Collectors.toList());
}
像这样尝试。使用 Arrays.stream()
通过可变参数语法流式传输列表数组。
public static <T> List<T> getNewList(List<T>... list) {
return Arrays.stream(list).flatMap(Collection::stream)
.collect(Collectors.toList());
}
Arrays.stream
应该可以解决问题:
public static <T> List<T> merge(List<T>... lists) {
return Arrays.stream(lists)
.flatMap(List::stream)
.collect(Collectors.toList());
}
顺便说一句,我刚刚注意到您的解决方案几乎没问题。您唯一需要添加的是 <Integer>
。所以Stream.of
应该也可以。
public List<Integer> getNewList(List<Integer>... list) {
List<Integer> newList =
Stream.of(list)
.flatMap(Collection::stream)
.collect(Collectors.toList());
return newList;
}
事实上,Stream::of
在后台调用 Arrays::stream
。因此,您可以将它们中的任何一个用于您的特定用例。