プログラミング Java

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

投稿日:2021年5月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を使う。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

SQL, Mybatis, OR, O/R

【MyBatis】IN句にパラメータを設定する方法

SpringアプリケーションにおいてMybatisを使用する状況を想定した実装例です。 期待値 IN句に複数のパラメータが設定されたSQL文が発行されること [crayon-63d9ddaaa0fab …

プログラミングを上達させるために私がやってきたこと・やっていること

私の上達過程 写経 自分のレベルに合う本をもとに写経しては、コードの意味を調べて理解し、少しづつ体に染み込ませるように身に着けていきました。 とにかく初心者のころは右も左も分からず、ちょっとしたエラー …

オブジェクト指向とは何なのかを簡単に説明してみる

オブジェクト指向とは何なのか? これを私の理解を元に、ごくごく簡単に説明してみたいと思います。   オブジェクト指向とは? オブジェクト指向とは何かを説明するために、 「オブジェクト」と「指 …

【Java入門】プロジェクトの作成からHello, World!まで

概要 プログラミングの入門といえば「Hello, World!」です。 まずは最も簡単なプログラムを動かすことから始めていきましょう。   プロジェクトの作成 新規プロジェクト作成 新規で「Javaプ …

【SpringBoot入門】#5~ 登録画面の作成

概要 共通ヘッダーの「新規登録」リンクから遷移する、書籍情報登録画面を作成します。 遷移できるようにControllerの作成と、遷移先である画面をHTMLで作成していきます。   Formクラスの作 …

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。