我写了一些代码来创建一个 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,它与常规流有何不同,什么时候使用它?
最佳答案
你或多或少使用了IntStream
当您有不需要装箱的中间或终端操作时,以及经常需要算术结果时。例如,你可以写
students.stream().mapToInt(Student::getTestScore).average()
通常,当您的中间结果未装箱时,您会希望使用它——List<List<Integer>>
不是这种情况。或者你将未装箱的结果映射到装箱的东西 mapToObj
,或者用它做一些算术运算,比如 average()
在这里。
除了这个用例可能带来的痛苦之外,它不会给你带来任何好处,它实际上并不关心列表内容是 Integer
;你在这里没有使用任何关于整数的东西。
关于java - IntStream 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27494074/