プログラミング 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


関連記事

junit, テスト, junit5

【Junit5】@ParameterizedTestでnullを扱う方法

説明 @ParameterizedTestでnullを扱うには、値を空欄にする必要があります。 「null」という値を与えても文字列として扱われてしまうので注意が必要です。 コード nullをテストす …

【Spring】バリデーション時に、入力値を保持する方法

登録画面で「登録」ボタンを押した後、 バリデーションで引っ掛かってエラーになっても 入力内容を画面に保持して置く方法についてです。 テンプレートエンジンは、Tymeleafを使用しています。 方法とし …

Java Silver SE11に誰でも合格できる方法

※お断り とても基本的かつ地道な方法です。 なので、魔法や銀の弾丸を求めている方はそっとページを閉じてください。 地道にこつこつと努力できる方のみ読み進めて下さい。 対象 ・Java Silver S …

CSV/TSVデータを作成するVBAツールを公開

【追記:2020年8月1日】 UTF-8(BOM無し)に対応しました。 業務でテスト用のCSVファイルを作成することがよくあるので、自分でツールを作成しました。 TSVにも対応しています。 基本仕様 …

【JdbcTemplate】Queryの書き方(更新系)

  前提 以下のテーブル(users)を持ち、格納するのはUserクラスという想定で説明していきます。 usersテーブル

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

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

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