Java 泛型:使用 Stream.toArray() 时编译失败

问题描述 投票:0回答:1

给出一个简单的泛型类:

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;
    }
}

初始化该类的列表:

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]);

为什么?

java generics lambda java-stream toarray
1个回答
2
投票

Stream
toArray
采用
IntFunction<A[]>
- 即接受
int
并返回数组的函数。

您尝试将数组传递给它。

应按如下方式使用:

container.stream().map(value -> value.aList).toArray(List<?>[]::new)
© www.soinside.com 2019 - 2024. All rights reserved.