【Java】streamのreduceって何?説明していくよ!!

reduceメソッドって理解しにくいのですよね…

という事で、今回はstreamのreduceメソッドについて説明していきます

reduceメソッドはStream内の要素を結合して単一の結果を生成するためのメソッドです
⇒ 畳み込み演算を行います

畳み込み演算とは要素を順番に結合して1つの結果にまとめる操作のことです

reduceメソッドは2つの引数を取ります

  1. 初期値 (identity): 畳み込みの最初のステップで使用される値
  2. BinaryOperator (accumulator): 2つの引数を受け取り、それらを結合して新しい値を返す関数

では一つ例を見てみましょう

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 初期値0を使用して合計を計算
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b);

System.out.println("合計: " + sum);

// 合計: 15

この例では初期値0が畳み込みの最初のステップで使用され、ラムダ式 (a, b) -> a + b が各要素の結合を定義しています

畳み込みの結果として、リスト内のすべての要素が加算された合計が得られます

重要なのは

  • 初期値が重要(第一引数)
    初期値はStreamが空であった場合や要素が1つしかなかった場合など、畳み込みの初めの段階で使用されます。
  • BinaryOperator(第二引数)
    ラムダ式やメソッド参照を使用して、2つの引数を結合して新しい値を生成します
    この結合関数は副作用がないように注意する必要があります

他にも使用例を紹介していきます!!

文字の結合

List<String> strings = Arrays.asList("Java", "Stream", "API");

// 文字列を結合
String result = strings.stream()
                       .reduce("", (a, b) -> a + b);

System.out.println("結合結果: " + result);

// 結合結果: JavaStreamAPI

この例では空の文字列 “” を初期値として、a + b の形で文字列を連結しています

最大値の取得

List<Integer> numbers = Arrays.asList(10, 4, 7, 21, 8);

// 最大値の取得
int max = numbers.stream()
                 .reduce(Integer.MIN_VALUE, Integer::max);

System.out.println("最大値: " + max);

// 最大値: 21

Integer::max メソッド参照を使用して、最大の要素を求めています
初期値はInteger.MIN_VALUEとして、リストが空である場合にも正確な結果が得られるようにしています

積の計算

List<Integer> numbers = Arrays.asList(2, 3, 4, 5);

// 積の計算
int product = numbers.stream()
                    .reduce(1, (a, b) -> a * b);

System.out.println("積: " + product);

// 積: 120

この例では初期値を1とし、各要素を掛けていくことでリストの積を計算しています


このようにreduceメソッドでは柔軟に処理することができます!!

ぜひ活用してみてください

ではっ

是非フォローしてください

最新の情報をお伝えします