プログラミング Java

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

投稿日:

概要

前回の【Java】ListをStreamで処理する方法 7選!に続き、Set編です。

基本的にListもSetもCollection型であるため、コーディングに大きな差はありません。
気を付けるべきは、格納されている要素の順序です。
ほとんどの場合、SetというとHashSetを使っていると思います。

HashSetは格納順で要素を保持しない仕様なので、最初に格納した要素を取得しようとしても別の要素を取得してします恐れがあります。
その点についての対策も含めて解説していきたいと思います。

前準備

【Java】ListをStreamで処理する方法 7選! > 前準備を参照下さい。

 

実装例

ListとSetで処理方法が変わる方法については、以下のように番号を振って、解説を加えておきます。
① -> Listと変わらない方法
② -> 格納順を意識しなくてはならない方法

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

①特定の要素を取得するだけなので、並び順は関係無くListと同じです。

 

合計を算出する

①全要素の合計であるため、並び順は関係無くListと同じです。

 

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

①並び変えるため、元の並び順は関係なくなりますのでListと同じです。

 

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

①昇順と同じです。

 

最初の要素を取得する

②HashSetは格納順が保障されていないので、最初に格納した要素を取得できない場合があります。
格納順を維持したい場合は、LinkedHashSetを使用することをお奨めします。
または、並び替えのキーがあれば、その結果の最初の要素を取得することができます。

 

最後の要素を取得する

Listではreduceを使用する方法を記載しましたが、HashSetは最後の要素が格納順であることは保証されていないため、並び順を変えるか、LinkedHashsetを使用するのは昇順と同じです。
ここではreverce(逆順)にすることで最後の要素を取得します。

 

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

②変換したあとの値の並び順は保証されていません。
ソートし直すのであればsortedが使用できますが、元々の格納順を維持した結果がほしい場合は、LinkedHashsetを使用することをお奨めします。

 

まとめ

  • SetはListと同じCollection型なので、基本的な操作は同じである。
  • HashSetは格納順を維持しない。
  • 格納順を維持した操作をする場合、LinkedHashsetとしておくか、意図した並び順にソートする必要がある。

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

ランキング評価する

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

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

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

概要 【Java】ListをStreamで処理する方法 7選! 【Java】SetをStreamで処理する方法 7選! に続き、Map編です。 Mapをstreamで扱う場合、entrySetまたはK …

【Java入門】メソッドとは?使い方まとめ

概要 メソッドとは何か? また使い方をわかり易く説明します。   メソッドとは? 固く言うと、一連の処理を一つにまとめたものです。 平たく言うと、何らかの処理を1つにまとめたものです。 例 Syste …

【SpringBoot入門】#7~ 検索画面の作成

概要 書籍情報を検索するフォーム(検索フォーム)と検索結果を表示する画面(検索結果一覧)を作成します。 検索フォームと検索結果一覧はHTMLファイルを分けて作成しています。 分けることは必須ではなく、 …

【JdbcTemplate】Queryの書き方(SELECT文)

JdbcTemplateでQueryを書く方法です! (SELECT文で、1件・複数件を取得するケース)   前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で …

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

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

記事を探す

SpringFramworkの良書

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

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