【Java】ListをStreamで処理する方法 7選!

目次

概要

ListをStreamで処理する方法のうち、よく使う処理方法を掲載します。

前準備

プリミティブなListでStreamを利用するシーンをあまり想定できなかったので、オブジェクトのListでの事例と致します。
まずは以下のProductクラスがあると仮定します。

Productクラス

実装例

テストがGreeanになったコードで記載いたします。

特定の要素のみを取得する

Listの中から特定の条件に該当する要素だけを取得したい場合、filterを使います。
ここでは、カテゴリー:玩具に該当するProductオブジェクトのみを取得しています。

合計を算出する

Productオブジェクトのpriceを合計した結果を取得します。
通常のmapではなく、mapToIntを使うことでIntStreamを返すことができます。
IntStreamにはsumメソッドが用意されており、それにより合計を算出することができます。

最初の要素を取得する

Streamで最初の要素を取得する場合、findFirstを使います。
でも、Listの最初の要素を取得するには、「List.get(0)で十分ではないか?」と思われたのではないでしょうか?
その場合、もし要素が無ければIndexOutOfBoundsExceptionが発生します。
findFristの場合はOptionalを返してくれるので、orElseなどで要素が無い場合の戻り値を決めてあげることができるのがメリットです。

最後の要素を取得する

lastのような機能は無いので、reduceを使用して最後の要素を取得する方法があります。
reduceの演算結果として、常にCurrentの要素が返ってくるようにすることで、最後の要素が取得できます。
Listの要素が無い場合のために、orElseで戻り値を定義しておくこともできます。

なんらかの値に変換した値を取得する

mapを使用して、何らかの加工を施した結果を取得する方法です。
ここではオブジェクトの各フィールド値を文字列型にフォーマットして返しているだけです。
(正直これであれば、Productクラスにtextメソッドのようなものを作ってしまった方が適切ですが、mapの事例として記載させて頂きました)

並べ替えた結果を取得する(昇順)

price順で並び替えた結果を取得しています。
comparingメソッドの引数に、比較用のソート・キーを指定します。
そうするとComparatorを返してくれます。
そのComparatorはcompareで大小比較するので、小さい順に並んだ結果が返ってきます。

並べ替えた結果を取得する(降順)

昇順にreversedメソッドを付けることで降順にしています。

まとめ

  • 特定の要素を取得するときはfilterを使う。
  • 合計を算出する場合、mapToIntでIntStreamにしてからsumで取得する。
  • 最初の要素はfindFistを使う。
  • 最後の要素はreduceで現在の要素を常に返すことで取得する。
  • 何らかの値に変換したい場合はmapを使う。
  • 並び替えはsortedとComparatorを組み合わせる。
  • 降順はreversedを使う。

最後に

ListはJava Silver SE 11の出題範囲になっています。
ぜひしっかりと理解して合格を目指しましょう!

最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

リーマンショックの影響で26歳の時にIT業界から離れ、紆余曲折を経て34歳でエンジニアに復帰しました。今はフリーランスエンジニアとして仕事をしています。

コメント

コメントする

CAPTCHA


目次