プログラミング 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】文字列の完全一致と部分一致を判定する方法

Stringオブジェクトのmatches、containsメソッドを使った説明です。 戻り値:boolean ■追記(2022/5/4) ・前方一致にstartWithメソッドの用例 ・後方一致にen …

junit, テスト, junit5

【Junit5】表示名のカスタマイズ(@DisplayName)

概要 Junit5で表示名をカスタマイズする方法です。 Junit4については以下を参考にしてください。  ↓ https://irof.hateblo.jp/entry/20130124/p1 でき …

【Java入門】クラスとインスタンスの違いを分かり易い言葉で説明します。

概要 クラスとインスタンスの違いについて、できるだけ分かり易い言葉や表現で説明します。   クラス 設計書だよ。 以上です。 ほんとマジで。 どんなデータと操作が可能かを決めているだけなので設計書と表 …

elseを使わないことでパフォーマンスが下がる場合の対処法

  状況 前回記事(なぜelse、else ifを書かないようにすべきなのか?)のような ifのみで判定されており、それがfor文等の繰り返し処理の中にある場合は パフォーマンスが下がる。 …

【Java入門】Predicateの使い方まとめ

概要 Predicateはtestメソッド持つ関数型インターフェースです。 引数を1つ受け取り、booleanを返します。   基本的な使い方 test(T t)には、ジェネリクスに指定する型を引数と …

SpringFramworkの良書

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

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