【Kotlin/Android】reduce/sumof/foldメソッドの使い方!コレクションの集約と合計

この記事からわかること
- Android/Kotlinのreduce/sumof/
fold
メソッドの使い方
\ アプリをリリースしました /
環境
- Android Studio:Koala
- Kotlin:1.9.0
コレクションの集約と合計を行うメソッド
Kotlinでコレクションの集約と合計を行えるメソッドは複数あり以下の通りです。それぞれの使い方と違いをまとめていきます。
- sumof
- reduce
- fold
sumofメソッド
sumof
はコレクションの各要素の合計を取得できるメソッドです。扱えるデータ型は数値系のみでString型などを渡すとエラーになります。
ラムダ内で要素を参照できるのでデータクラスのプロパティなどの合計を取得したりすることも可能です。
reduceメソッド
reduce
はコレクションの各要素を集約した結果を取得できるメソッドです。もちろんsumof
と同じようにコレクションの合計値を算出することも可能です。reduce
ではラムダの引数に前回の値と次のコレクションの要素を受け取ることができます。
数値系だけという制約はないので文字列の連結などを行うことも可能です。
またreduce
は空のリストを渡してしまうとUnsupportedOperationException
エラーを吐いてクラッシュします。これは初期値として参照する最初のコレクションの値がないためです。
sumof
や後述しているfold
ではコレクションが空でも例外発生しません。またreduceOrNull
メソッドを使用することでnull
を返すようにすることも可能です。
foldメソッド
fold
はreduceに初期値を指定できる機能が追加されたメソッドです。
違いまとめ
項目 | sumOf | reduce | fold |
---|---|---|---|
主な用途 | 数値の合計を求める | 任意の処理で集約 | 初期値付きの任意の集約処理 |
初期値の | - | なし (リストの最初の要素が初期値) |
あり (引数で明示的に指定) |
空リスト安全 | 安全 | 例外発生 | 安全 |
戻り値の型 | 数値型 | コレクションの要素型 | 初期値で指定した型 |
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。