Java 8で導入されたSummaryStatisticsは、count、min、max、sum averageなどのstatistics情報を計算するクラスです。そしてストリームと一緒に使用することができます。
SummaryStatisticsは、Int、Long、Doubleデータ型をサポートする以下のクラスを使用できます。以下のようにサポートするデータ型ごとにクラス名が異なります。
- IntSummaryStatistics
- LongSummaryStatistics
- DoubleSummaryStatistics
この記事では、SummaryStatisticsの基本的な使用方法と例について説明します。
1. IntSummaryStatistics
次の例は、StreamでIntSummaryStatisticsを使用する例です。
以下の例を見ると、Streamは文字列を要素に渡し、 mapToInt()
でStringをIntに変換しました。
そして、このストリームに対して summaryStatistics() で statistics オブジェクトを生成しました。
SummaryStatistics は以下のように getMax()
, getMin()
, getAverage()
, getCount()
などの関数を提供し、簡単に最大値、最小値、平均などを計算できます。
List<String> langs =
Arrays.asList("java", "kotlin", "haskell", "ruby", "javascript");
IntSummaryStatistics stats = langs.stream()
.mapToInt((lang) -> (lang.length()))
.summaryStatistics();
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
System.out.println("Count: " + stats.getCount());
Output:
Max: 10
Min: 4
Average: 6.2
Count: 5
SummaryStatisticsの関数名が示すように、次の値を返します。
- IntSummaryStatistics.getMax() : 最大値
- IntSummaryStatistics.getMin() : 最小値
- IntSummaryStatistics.getAverage() : 平均値
- IntSummaryStatistics.getCount() : 要素の総数
2. IntSummaryStatistics.accept()
accept()
は IntSummaryStatistics オブジェクトに新しいアイテムを追加するメソッドです。以下のコードでは、acceptメソッドとして20を追加し、結果を見ると、既存の値に20まで含めて計算された結果が出力されました。
List<String> langs =
Arrays.asList("java", "kotlin", "haskell", "ruby", "javascript");
IntSummaryStatistics stats = langs.stream()
.mapToInt((lang) -> (lang.length()))
.summaryStatistics();
stats.accept(20);
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
System.out.println("Count: " + stats.getCount());
Output:
Max: 20
Min: 4
Average: 8.5
Count: 6
3. IntSummaryStatistics.combine()
combine()
は、2 つの statistics オブジェクトを結合する関数です。
以下のコードを見ると、stats、stats2オブジェクトを作成し、combine()で2つのオブジェクトを結合しました。結果を見ると、2つのオブジェクトの結果として再計算された結果が出力されました。
List<String> langs =
Arrays.asList("java", "kotlin", "haskell", "ruby", "javascript");
IntSummaryStatistics stats = langs.stream()
.mapToInt((lang) -> (lang.length()))
.summaryStatistics();
List<String> companies =
Arrays.asList("google", "apple", "google", "apple", "samsung");
IntSummaryStatistics stats2 = companies.stream()
.mapToInt((lang) -> (lang.length()))
.summaryStatistics();
stats.combine(stats2);
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
System.out.println("Count: " + stats.getCount());
Output:
Max: 10
Min: 4
Average: 6.0
Count: 10
4. Collectors.summarizingInt() で SummaryStatistics を作成する
collect() 関数と Collectors.summarizingInt()
を使って SummaryStatistics オブジェクトを作成することもできます。
List<String> langs =
Arrays.asList("java", "kotlin", "haskell", "ruby", "javascript");
IntSummaryStatistics stats = langs.stream()
.collect(Collectors.summarizingInt(String::length));
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());
System.out.println("Average: " + stats.getAverage());
System.out.println("Count: " + stats.getCount());
Output:
Max: 10
Min: 4
Average: 6.2
Count: 5
5. LongSummaryStatistics, DoubleSummaryStatistics の使用方法
上記のIntSummaryStatisticsの例とクラス名だけが異なるだけで、実装方法は同じです。
Related Posts
- Java - AtomicReference使用方法
- Java - CountDownLatchを使用する方法、および例
- Java - ScheduledThreadPoolExecutor使用方法
- Java - SummaryStatisticsの使用方法(count、min、max、average)
- Java8 - 関数型インタフェース (Functional Interface) について
- Java - String配列をint配列に変換する
- Java - ArrayList要素の値を変更する方法、replaceAll()
- Java - 2つのリストが同じかどうかを比較
- Java - 配列から特定のIndex要素を削除する3つの方法
- Java - HashMapソート、4つの方法
- Java - 文字列を配列に変換する方法
- Java - ArrayListが空であることを確認する3つの方法
- Java - ArrayListの巡回、4つの方法
- Java - ArrayListの最大値、最小 値を見つける
- Java - ArrayListの合計、平均値の計算
- Java - HashMap巡回、3つの方法
- Java - do whileとwhileの違い
- Java - Lambda式と関数型インタフェース
- Java - List empty(null)チェック、3つの方法
- Java - ArrayListの初期化、4つの方法
- Java - Stream.reduce()の使い方と例
- Java - 2つのマップを結合する(merge、putAll)
- Java - java.util.Dateをjava.sql.Dateに変換する
- Java - ArrayListをStringに変換する
- Java - ClassNotFoundExceptionの発生原因と解決策
- Java - 非静的メソッドは静的コンテキストから参照できません
- Java - NoSuchMethodErrorの原因と解決策
- Java - JSONライブラリを使用する方法(JSONObject、JSONArray)
- Java - byte[]配列をFileに保存
- Java - byte[]の配列をStringに変換
- Java - ファイルのアクセス権を確認し、変更
- Java - 一時フォルダ(Temp directory)パスを取得する
- Javaでシェルスクリプトを実行
- Java - Streamを配列に変換する
- Java - リスト重複排除、2つの方法