为什么 minBy() Stream 方法返回Optional,而其他方法则不返回(例如 summingInt、averagingInt)?

问题描述 投票:0回答:1

我的问题是为什么

Collectors.minBy()
方法返回
Optional
,但
Collectors.summingInt()
Collectors.averagingInt()
方法不返回
Optional
?调用这些方法的时候流不可能是空的吗?

java java-stream
1个回答
2
投票

从逻辑上讲,如果集合为空,则不能有最小值或最大值。当不可能存在合法值时,返回空

Optional
是合适的。

相反,人们可能会认为没有元素的总和(空集合)为零,零在数字上意味着“无”。如果我没有苹果,再加上一袋没有苹果的空袋,那么我有多少个苹果?零;一切之和为零。

平均值同上。如果我有三个空袋子,则每袋苹果的平均数量为零。

但是,我承认理性的人可能会不同意,尤其是在某些情况下。我不知道数学家世界怎么说。但我确实相信普通商人在这两种情况下都会期望为零。

请注意,Javadoc 明确指出:“如果不存在任何元素,则结果为 0。”。 最后,重要的是 Javadoc 承诺的行为。如果该行为不符合您的期望,请用另一个符合您期望的类替换对该类的使用,或者编写您自己的类。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.