2017-09-12 1 views
1

わかっているように、SummaryStatisticsにはcount、sum、min、average、maxの値が含まれています。 カウント値と合計値だけを返すと効率的でしょうか?そうであれば、それを達成する方法は?java 8 SummaryStatisticsからの合計値とカウント値を返す方法

あなたは私を見るために、コードの下に編集することができます:私が正しくあなたを理解している場合

Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f). 
      filter(i -> i > 0.5).mapToInt(i -> (int) (i * 100 - 50)).summaryStatistics() 

はあなたに

+1

「SummaryStatistics」とは何か...説明してください... [IntSummaryStatistics](https://docs.oracle.com/javase/8/docs/api/java/util/IntSummaryStatistics)のような話をしていますか? html)はここにありますか? – nullpointer

+0

@nullpointerはい、それはIntSummaryStatisticsまたはDoubleSummaryStatisticsのような他の型です。 summaryStatisticsはメソッド名です。 –

+0

あなたは合計とカウントだけにアクセスしたいので、なぜgetSumとgetCountはあなたにとって役に立たないのですか? – nullpointer

答えて

1

ありがとうあなたは二回かに一度ソースを横断し、IntSummaryStatisticsを使用する必要がある場合は、あなたが求めています。それは言うのは難しい測定することなく

IntSummaryStatistics summaryStatistics = Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f) 
      .filter(i -> i > 0.5) 
      .mapToInt(i -> (int) (i * 100 - 50)) 
      .summaryStatistics(); 

    summaryStatistics.getSum(); 
    summaryStatistics.getCount(); 

が、いくつかの操作は、SIZEDフラグをクリア何も操作がない場合countを用いた場合のことに注意してください:

Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f) 
      .filter(i -> i > 0.5) 
      .mapToInt(i -> (int) (i * 100 - 50)) 
      .count(); 

Stream.of(0.55f, 0.45f, 0.5f, 0.65f, 0f) 
      .filter(i -> i > 0.5) 
      .mapToInt(i -> (int) (i * 100 - 50)) 
      .sum(); 

バーサス:同様に、これは安くなるだろう完全にスキップすることができます。例えば: - これはスキップされ、実際にはJavaの-9で

long result = Stream.of(1, 2, 3, 4, 5) 
      .mapToInt(x -> { 
       System.out.println("mapping"); 
       return x; 
      }) 
      .count(); 

System.out.println(result); 

mapToIntは、ここですべて処理する必要はありません。同じ最適化はIntSummaryStatisticsでは行われません。カウントは常に計算されます。あなたの例ではそうではありませんが、知っておくとよいことです。

いずれにせよcountsumを使用すると言いますから、私はまだIntSummaryStatisticsを2回以上繰り返して選択します。 IntSummaryStatistics内で実行される他の2つの操作は、Math.minMath.maxです。

+0

実際には、IntSummarryStatisticsに他の値は必要ないため、合計値とカウント値のみを取得する方法があるとします。 IntSummarryStatisticsを使用するより効率的な方法があるのでしょうか、おそらくカスタムコレクターかreduceメソッドか、私はそれを取得する方法がわかりません。とにかくあなたの説明に感謝します、それはいいです。 –

+0

@RickGengおそらく存在しない場合は、パフォーマンスの問題を探しているでしょう。はい、カスタムコレクターを書くことは可能です(それほど難しいことではありません)が、必要はありませんが、あなたはほとんど違いを感じることはありません – Eugene

関連する問題