当前位置: 首页 > 知识库问答 >
问题:

Java 8 Streams——为什么我不能对一个整数流求和?

蒋原
2023-03-14

给定一个整数列表:列表

为什么我不能像这样求和:numbers.stream(). sum();

相反,我必须这样做:numbers.stream().mapToInt(e -

我知道mapToInt会产生一个IntStream,即原始的特化。但我仍然不明白。为什么它不能对整数求和?我知道这个列表有整数,编译器应该能够做同样的事情。毕竟,它现在可以推断 lambda 表达式中的类型参数。

好的,一个整数可能为空,sum会失败。但是我可以对此负责,过滤掉空值:

numbers.stream().filter(Objects::nonNull.sum()

为什么我不能和整数流?


共有3个答案

孟晨朗
2023-03-14

您不能执行以下操作:

numbers.stream().sum();

因为<code>流

唐焕
2023-03-14

龚承嗣
2023-03-14
匿名用户

列表上调用流(),将得到一个通用的数据,它可以处理任何引用类型,而不仅仅是数字类型。在中包含求和方法是没有意义的,因为求URLs、es、Threads或任何其他非数字引用类型的和都没有意义。

您可以通过调用< code>reduce对元素求和:

numbers.stream().reduce(0, (a, b) -> a + b)

但是这将涉及大量的拆箱和装箱。最好是对它们求和,方法是将其转换为< code>IntStream,对< code>int进行操作,并调用< code>sum()(或< code>summaryStatistics(),其中包括count、average、max和min以及sum)。

您甚至可以使用IntStream.of,并避免将值装箱一次。

IntStream.of(1, 2, 3).sum()

 类似资料:
  • 我有一个db2查询,今天我意识到需要扩展该查询。 我的表使用联接已经相当复杂了,所以我并不想添加联合查询。我想做一个完整的外部连接。 我想是因为另一个左联接。

  • 我从课本上抄了一个例子,但它拒绝编译。我是不是在什么地方打错了?出于某种原因,在客户端代码中,collections.sort(words)不允许程序编译。任何帮助都很感激。代码复制自Stuart Reges和Marty Stepp的“构建Java程序”第二版。我正试图通过复制来理解它。 该程序应该将一个CalendarDate对象装入一个ArrayList中。通过实现CalendarDate的可

  • 问题内容: 在Java 8中,有一个新方法可返回代表字符代码的)流。我想很多人会期待这里有s 流。这样设计API的动机是什么? 问题答案: 正如其他人已经提到的那样,其背后的设计决策是防止方法和类的爆炸式增长。 尽管如此,我个人还是认为这是一个非常糟糕的决定,并且鉴于他们不想做出合理的替代方法,我应该考虑: ,它会提供一系列字符,这会降低性能。 ,该代码将用于性能代码。 但是,我认为,这个答案应该

  • 问题内容: 在Java中,hashcode()方法返回整数而不是long。有什么具体原因吗? 问题答案: 那么,一个良好的理由是,基于数据结构(,)使用一个数组来存储箱,并且阵列被限制为索引。 如果必须将其映射到数组索引,那么您将一无所获。

  • 尽管有值,但我不能得到一个用户的值的和时间。 即使用户17有工作时间值,我也会在sumTW列中得到该用户的NULL值。我该怎么解决? 这就是我的查询看起来的样子: 下面是表格代码: (这个表和原来的不一样,原来的有外键。我去掉它们只是为了能够再现同样的问题,同样的问题被报告了)。