为什么我们必须将Collectors.toList()返回的List转换为List ,即使Stream的元素已经映射到Integer?
我将原始Stream
映射到Stream
,然后将元素收集到List
。
如果我的mapper – .map(str -> ((String)str).length())
– 我已经映射到Integer
为什么我必须将collect(Collectors.toList())
为List
?
我的代码:
List list = Arrays.asList("test", "test2"); List lengths = (List) list.stream() .map(str -> ((String)str).length()) .collect(Collectors.toList());
如果我不使用原始List
,则无需强制转换:
List list = Arrays.asList("test", "test2"); List lengths = list.stream() .map(str -> str.length()) .collect(Collectors.toList());
在原始List
上调用list.stream()
会生成原始Stream
。 在该Stream
上调用map
不会将该Stream
更改为通用Stream
。 它将其更改为另一个原始Stream
。 因此,当您调用collect(Collectors.toList())
,您将获得一个原始List
并且必须将其强制转换为(List
。
结论:不要使用原始类型。