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


関連記事

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

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

CompsiteパターンでHTMLタグを実現するには?

Compositeパターンに応用できそうなものとして、 HTMLタグなんかいいかと思いコーディングしてみました。   クラス図   説明 Compositeパターンは再帰構造を実現 …

SingletonパターンをJUnitでテストする

シングルトンパターンはインスタンスが1つであることを保証する設計です。 Junitを使って、本当に1つだけなのかを検証してみます。 またその手順をテスト駆動開発に従った手順(Red→Green→リファ …

【SpringBoot入門】#2~ 開発環境を準備しよう(DB)

DB(MySQL) ダウンロード MySQLダウンロード 私の環境がWindowsのため、画像はWindows用になっています。 あなたの環境に合わせたOSを選択してDLして下さい。 インストール ダ …

Springでバリデーションがimportされていないときの対処法

状況 SpringF/Wでバリデーションを実装したいが、@NotNullや@Minといったアノテーションが使えない。 @NotNullを使おうとすると、import com.sun.istack.No …

記事を探す

SpringFramworkの良書

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

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

サイト内検索