Stream 中有没有办法将 SUM 作为中间操作

Is there way in Stream to get the SUM as intermediate operation

因为Sum, Collect & reduce是终端操作。 有没有办法将流中的总和结果与流中的 return 布尔值进行比较。

我写了下面的代码片段来找到完全数。 如果 SUM = Given Number

,它所缺少的只是最后一行比较
    private static boolean isPerfectNumber(int number) {
            return IntStream.range(1, number / 2 + 1)
                            .filter(e -> number % e == 0)
                            .reduce(Integer::sum)
                            .equals(number); // This Line won't give correct result because I'm comaring an OptionalInt to a Integer instead of optional value.
    } 

有没有办法在这个流中实现这一点,或者我必须单独比较结果

使用 IntStream#sum 本身使用重载的 reduce API:

return IntStream.range(1, number / 2 + 1)
                .filter(e -> number % e == 0)
                .sum() == number; // same as reduce(0, Integer::sum)

执行orElse然后比较整数值-

.reduce(Integer::sum).orElse(0) == number;

OptionalInt中执行equals作为

.reduce(Integer::sum)
.equals(OptionalInt.of(number))