Java 泛型:Stream toArray()
Java Generics: Stream toArray()
给定一个简单的泛型 class:
private static class Container<T> {
private List<T> aList;
private T aValue;
private Container(List<T> aList, T aValue) {
this.aList = aList;
this.aValue = aValue;
}
}
初始化class的列表:
List<Container<?>> container = new ArrayList<>();
// Add some elements...
不可能(类型 Stream> 中的方法 toArray(IntFunction) 不适用于参数 (List>[])):
container.stream().map(value -> value.aList).toArray(new List<?>[0]);
可能:
container.stream().map(value -> value.aList).collect(Collectors.toList()).toArray(new List<?>[0]);
为什么?
Stream
的 toArray
采用 IntFunction<A[]>
- 即接受 int
和 returns 数组的函数。
您试图将数组传递给它。
应该这样使用:
container.stream().map(value -> value.aList).toArray(List<?>[]::new)
给定一个简单的泛型 class:
private static class Container<T> {
private List<T> aList;
private T aValue;
private Container(List<T> aList, T aValue) {
this.aList = aList;
this.aValue = aValue;
}
}
初始化class的列表:
List<Container<?>> container = new ArrayList<>();
// Add some elements...
不可能(类型 Stream> 中的方法 toArray(IntFunction) 不适用于参数 (List>[])):
container.stream().map(value -> value.aList).toArray(new List<?>[0]);
可能:
container.stream().map(value -> value.aList).collect(Collectors.toList()).toArray(new List<?>[0]);
为什么?
Stream
的 toArray
采用 IntFunction<A[]>
- 即接受 int
和 returns 数组的函数。
您试图将数组传递给它。
应该这样使用:
container.stream().map(value -> value.aList).toArray(List<?>[]::new)