当サイトは、アフィリエイト広告を利用しています

【java8】streamを使ってListをsortする

作成日:2022月03月15日
更新日:2023年12月14日

javaのStreamAPIでのsortの仕方をまとめる。

下記の本では streamAPI についても詳しく書いてありおススメです!

また当ブログで紹介しているjava8のstreamAPIを使った
コレクションや配列の操作方法を
下記記事でメソッド別にまとめています!

昇順の場合

java
return objectList.stream().sorted(Comparator.comparing(Work::getReward)).collect(Collectors.toList())

降順の場合

comparing は第二引数に Comparator を渡すことでソート条件を指定できる
1.Comparator.reverseOrder()を追加※基本はこっちを使う

java
return objectList.stream()
.sorted(Comparator.comparing(Work::getReward,Comparator.reverseOrder()))
.collect(Collectors.toList())

2.reversedを追加
reversed() で逆順を指定することもできる

java
return objectList.stream()
.sorted(Comparator.comparing(Work::getReward).reversed())
.collect(Collectors.toList())

複数項目ソート

第二ソート項目をthenComparing()でつなげるだけ

java
return objectList.stream()
.sorted(Comparator.comparing(Work::getReward)
.thenComparing(Work::getTimeToFinish)).collect(Collectors.toList())

※Workはクラス名、getTimeToFinishなどはゲッターメソッド=メソッド参照

Comparatorについて

Comparatorには下記のメソッドがある

  • 比較メソッド
    • Comparator.comparing(e)
    • Comparator.comparing(e, c)
    • Comparator.thenComparing(e)
  • ソート条件メソッド
    • Comparator.naturalOrder()
    • Comparator.reverseOrder()
    • Comparator.nullsFirst(c)
    • Comparator.nullsLast(c)

比較メソッド

ソートを行うためめの

Comparator.comparing(e)

キー抽出関数 e を指定してコンパレータを生成

java
.sorted(Comparator.comparing(Item::getId))

Comparator.comparing(e, c)

キー抽出関数eとソート条件指定の コンパレータcを指定
ソート条件を指定する場合は第二引数に Comparator を渡す

java
.sorted(Comparator.comparing(Item::getId,
Comparator.reverseOrder())

Comparator.thenComparing(e)

複合条件を追加したコンパレータを生成(e はキー抽出関数)

java
.sorted(Comparator.comparing(Item::getId)
.thenComparing(Item::getName))

ソート条件メソッド

比較メソッドの引数に設定して使用する

Comparator.naturalOrder()

自然順序付けのコンパレータ

java
// 昇順
.sorted(Comparator.comparing(Item::getId,
Comparator.naturalOrder())

Comparator.reverseOrder()

逆順コンパレータ

java
// 降順
.sorted(Comparator.comparing(Item::getId,
Comparator.reverseOrder())

Comparator.nullsFirst(c),Comparator.nullsLast(c)

null を最小値,または最大値とみなすコンパレータ
(cはComparator.naturalOrder() or Comparator.reverseOrder())を設定

ソートキーに null を含む場合は NullPointerException となるため
Comparator.nullsFirst() などで null 時の挙動を指定することで、
NullPointerException を回避できる

java
List<Item> sorted = list.stream()
.sorted(Comparator.comparing(Item::getId)
.thenComparing(Item::getName, Comparator.nullsFirst(Comparator.naturalOrder())))
.collect(Collectors.toList());
List<Item> sorted = list.stream()
.sorted(Comparator.comparing(Item::getId)
.thenComparing(Item::getName, Comparator.nullsLast(Comparator.naturalOrder())))
.collect(Collectors.toList());

参考サイト

Comparator
Comparatorについて

複数ソート
JavaのStreamを使って複数条件でソートする

新着記事

タグ別一覧
top