为什么我们必须将Collectors.toList()返回的List转换为List <Integer>,即使Stream的元素已经映射到Integer?

isa*_*sah 1 java java-8 java-stream

我正在将原始映射Stream到a Stream<Integer>,然后将元素收集到a List<Integer>.

为什么我必须将结果投射collect(Collectors.toList())List<Integer>我的映射器.map(str -> ((String)str).length())- 已映射到Integer

我的代码:

List list = Arrays.asList("test", "test2");
List<Integer> lengths = (List<Integer>) list.stream()
                                            .map(str -> ((String)str).length())
                                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果我不使用raw List,则无需强制转换:

List<String> list = Arrays.asList("test", "test2");
List<Integer> lengths = list.stream()
                            .map(str -> str.length())
                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 10

召唤list.stream()原始List产品是原料Stream.呼吁mapStream不更改Stream为通用Stream<Integer>.它将它改为另一个原始Stream.因此,当你打电话时collect(Collectors.toList()),你得到一个原始的List,必须把它投射到(List<Integer>).

结论:不要使用原始类型.


归档时间:

查看次数:

810 次

最近记录:

8 年,3 月 前