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))
因为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))