IntStream有什么用例?

时间:2014-12-15 22:09:51

标签: java lambda

我已经编写了一些代码,可以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,它与常规流有什么不同,你什么时候使用它?

1 个答案:

答案 0 :(得分:4)

当您有不需要装箱的中间或终端操作时,或多或少地使用IntStream,并且经常需要算术结果。例如,您可以编写

students.stream().mapToInt(Student::getTestScore).average()

通常情况下,当您的中间结果未加框时,您希望使用它 - 与List<List<Integer>>的情况不同,并且您要将未装箱的结果映射到带有{的盒装内容{1}},或者像mapToObj这样做一些算法。

除了这个用例可能带来的痛苦之外,它并没有为你买任何东西,这实际上并不关心列表内容是average() s;你在这里没有使用任何关于整数的东西。