我的问题是为什么
Collectors.minBy()
方法返回 Optional
,但 Collectors.summingInt()
和 Collectors.averagingInt()
方法不返回 Optional
?调用这些方法的时候流不可能是空的吗?
从逻辑上讲,如果集合为空,则不能有最小值或最大值。当不可能存在合法值时,返回空
Optional
是合适的。
相反,人们可能会认为没有元素的总和(空集合)为零,零在数字上意味着“无”。如果我没有苹果,再加上一袋没有苹果的空袋,那么我有多少个苹果?零;一切之和为零。
平均值同上。如果我有三个空袋子,则每袋苹果的平均数量为零。
但是,我承认理性的人可能会不同意,尤其是在某些情况下。我不知道数学家世界怎么说。但我确实相信普通商人在这两种情况下都会期望为零。
请注意,Javadoc 明确指出:“如果不存在任何元素,则结果为 0。”。 最后,重要的是 Javadoc 承诺的行为。如果该行为不符合您的期望,请用另一个符合您期望的类替换对该类的使用,或者编写您自己的类。