Java Streams:複数条件でソートするテクニック

  • URLをコピーしました!

Java 8以降で利用できる Stream API を使うことで、コレクションの並び替えを簡潔かつ可読性高く記述できます。
本記事では、複数条件でソートしたい場合の正しい書き方 を、基本から実践例まで丁寧に解説します。


目次

Stream API におけるソートの基本

Stream API では、sorted() メソッドを使用して要素を並び替えます。

ただし、この形式は 自然順序(Comparable 実装) に従ってソートされるため、
独自の条件で並び替えたい場合は Comparator を指定する必要があります。


単一条件でのソート

まずは、単一の条件でソートする基本形です。

例:年齢で昇順ソート

このコードでは、Person#getAge() の値を基準に昇順で並び替えています。


複数条件でソートする基本構文

複数条件でソートする場合は、
Comparator.thenComparing() を使用します。

基本構文

この順序で、

  1. 条件1で比較
  2. 同値の場合のみ条件2で比較
  3. さらに同値の場合は条件3で比較

という動作になります。


実践例:複数条件での昇順ソート

例:部署 → 年齢 → 名前 の順でソート

この場合、以下の優先順位でソートされます。

  1. 部署(department
  2. 年齢(age
  3. 名前(name

昇順・降順を組み合わせる方法

条件ごとに 昇順・降順を切り替える ことも可能です。

例:部署は昇順、年齢は降順

  • reversed() を使用すると、その条件のみ降順 になります。
  • 全体を reversed() すると、すべての条件が反転するため注意が必要です。

null を含む場合の安全なソート

ソート対象の値が null になる可能性がある場合は、
Comparator.nullsFirst() または Comparator.nullsLast() を使用します。

例:名前が null の場合は最後に配置

これにより、NullPointerException を回避できます。


Comparator を事前に定義する書き方

処理が長くなる場合は、Comparator を変数として定義すると可読性が向上します。

業務コードでは、この書き方が推奨されるケースも多いです。


まとめ

  • Stream API で複数条件ソートする場合は thenComparing() を使用します
  • 条件の記述順が、そのまま優先順位になります
  • reversed() により条件単位で降順指定が可能です
  • null を含む場合は nullsFirst / nullsLast を使用します
  • Comparator を分離すると可読性・保守性が向上します
よかったらシェアしてね!
  • URLをコピーしました!
0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
目次
0
あなたの考えが大好きです、コメントしてください。x