我已经编写了一些代码,可以List<Integer>
创建一个Stream<List<Integer>>
,如下所示:
List<Integer> abc = stream.flatMap(e -> e.stream()).
collect(Collectors.toList());
但我对如何使用IntStream很感兴趣。我以为我能做到
List<Integer> abc = stream.flatMapToInt(e -> e.stream()).
collect(Collectors.toList());
使用flatMapToInt
给我一个收集器会收集的IntStream,但是我收到了一个编译错误:
Type mismatch: cannot convert from Collector<Object,?,List<Object>> to Supplier<R>
什么是IntStream,它与常规流有什么不同,你什么时候使用它?
答案 0 :(得分:4)
当您有不需要装箱的中间或终端操作时,或多或少地使用IntStream
,并且经常需要算术结果。例如,您可以编写
students.stream().mapToInt(Student::getTestScore).average()
通常情况下,当您的中间结果未加框时,您希望使用它 - 与List<List<Integer>>
的情况不同,并且您要将未装箱的结果映射到带有{的盒装内容{1}},或者像mapToObj
这样做一些算法。
除了这个用例可能带来的痛苦之外,它并没有为你买任何东西,这实际上并不关心列表内容是average()
s;你在这里没有使用任何关于整数的东西。