2017-10-16 11 views
2

Iterable<Integer>の合計を計算する必要があります。IterableからSumOfIntを計算する

final Iterable<Integer> score = this.points() 
final sum = new SumOfInts(...).value() 

クラスSumOfIntsを使用してこれを行うにはどうすればよいですか?

+0

SumOfIntsの実装はありますか? –

+0

@DanyalSandeelo [Here](https://github.com/yegor256/cactoos/blob/master/src/main/java/org/cactoos/iterable/SumOfInts.java)。質問のタグに触発されています。 – thanopi57

+1

'Iterable >を' Iterable > 'またはJava 8:' score.stream()。mapToInt(i - > i).sum(); 'に変換する必要があります。 – assylias

答えて

2

質問が正しく分かった場合は、この例のようなコードを使用して繰り返しを合計することができます。

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に変換することができます。その後、ストリームを縮小することができます。

ストリームを取得したらすぐに、複数の方法でリダクションを解決できます。

別の方法:あなたがOptional結果を取り除くよう

int summed = StreamSupport.stream(score.spliterator(), false).mapToInt(Integer::intValue).sum(); 
System.out.println(summed); 

これは、おそらく、よりよいです。

0

Integerを​​に変換する方法の例は見つかりませんでしたが、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; 
} 

しかし、私は良い方法があると確信しています。

関連する問題