java - IntStream 的用例是什么?

标签 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,它与常规流有何不同,什么时候使用它?

最佳答案

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

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

通常,当您的中间结果未装箱时,您会希望使用它——List<List<Integer>> 不是这种情况。或者你将未装箱的结果映射到装箱的东西 mapToObj ,或者用它做一些算术运算,比如 average()在这里。

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

关于java - IntStream 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27494074/

相关文章:

java - 如何使用 Jbutton 执行具有 main 方法的类

java - 使用 JComboBox 生成具有随机尺寸的特定形状以选择形状

java - 在 Java 8 中是否有一种优雅的方法来应用过滤器数组?

Java Streams 将 EnumMap 的 Map 转换为列表的 Map

java - 从 BigIntegers 流中过滤素数

java - Java 中 iReport 5.5.1 的异常

java - 如何以编程方式调用在 Spring 中使用 @Valid 参数在 @RequestMethod 方法上运行的相同 validator ?

java - Pattern.compile.split 与 StringBuilder 迭代和子字符串

c# - 如何在 C# 中正确使用 lambda 表达式的参数?

c# - 为什么执行 Lambda 表达式后无法在 DataGrid 中显示数据?