从 Iterable 计算 SumOfInts
Calculate SumOfInts from Iterable
我需要计算 Iterable<Integer>
的总和。
final Iterable<Integer> score = this.points()
final sum = new SumOfInts(...).value()
如何使用 class SumOfInts
执行此操作?
如果我正确理解你的问题,你可以使用类似于此示例的代码对可迭代对象求和:;
final Iterable<Integer> score = Arrays.asList(1, 2, 3, 4);
Optional<Integer> sum = StreamSupport.stream(score.spliterator(), false).reduce((i1, i2) -> i1 + i2);
System.out.println(sum.get());
打印结果为:
10
解释:
Iterable可以转换为spliterator和spliterator to stream。然后您可以对流执行缩减。
一旦你有了流,你就可以通过多种方式解决减少问题。
另一种选择:
int summed = StreamSupport.stream(score.spliterator(), false).mapToInt(Integer::intValue).sum();
System.out.println(summed);
这可能更好,因为您去掉了 Optional
结果。
我找不到任何有关如何将 Integer
转换为 Scalar<Number>
的示例,但由于 Scalar
是一个接口,您可以执行类似的操作。
public long sum() throws Exception {
final List<Scalar<Number>> score = this.points()
.stream()
.map(this::toScalar)
.collect(Collectors.toList());
return new SumOfInts(score).value();
}
private Scalar<Number> toScalar(final Number number) {
return () -> number;
}
但我敢打赌有更好的方法。
由于 Cactoos 0.22 您可以:
int sum = new SumOf(1, 2, 3).intValue();
我需要计算 Iterable<Integer>
的总和。
final Iterable<Integer> score = this.points()
final sum = new SumOfInts(...).value()
如何使用 class SumOfInts
执行此操作?
如果我正确理解你的问题,你可以使用类似于此示例的代码对可迭代对象求和:;
final Iterable<Integer> score = Arrays.asList(1, 2, 3, 4);
Optional<Integer> sum = StreamSupport.stream(score.spliterator(), false).reduce((i1, i2) -> i1 + i2);
System.out.println(sum.get());
打印结果为:
10
解释:
Iterable可以转换为spliterator和spliterator to stream。然后您可以对流执行缩减。
一旦你有了流,你就可以通过多种方式解决减少问题。
另一种选择:
int summed = StreamSupport.stream(score.spliterator(), false).mapToInt(Integer::intValue).sum();
System.out.println(summed);
这可能更好,因为您去掉了 Optional
结果。
我找不到任何有关如何将 Integer
转换为 Scalar<Number>
的示例,但由于 Scalar
是一个接口,您可以执行类似的操作。
public long sum() throws Exception {
final List<Scalar<Number>> score = this.points()
.stream()
.map(this::toScalar)
.collect(Collectors.toList());
return new SumOfInts(score).value();
}
private Scalar<Number> toScalar(final Number number) {
return () -> number;
}
但我敢打赌有更好的方法。
由于 Cactoos 0.22 您可以:
int sum = new SumOf(1, 2, 3).intValue();