当サイトは、アフィリエイト広告を利用しています
javaのStreamAPIでのsortの仕方をまとめる。
下記の本では streamAPI についても詳しく書いてありおススメです!
また当ブログで紹介しているjava8のstreamAPIを使った
コレクションや配列の操作方法を
下記記事でメソッド別にまとめています!
return objectList.stream().sorted(Comparator.comparing(Work::getReward)).collect(Collectors.toList())
comparing は第二引数に Comparator を渡すことでソート条件を指定できる
1.Comparator.reverseOrder()を追加※基本はこっちを使う
return objectList.stream().sorted(Comparator.comparing(Work::getReward,Comparator.reverseOrder())).collect(Collectors.toList())
2.reversedを追加
reversed() で逆順を指定することもできる
return objectList.stream().sorted(Comparator.comparing(Work::getReward).reversed()).collect(Collectors.toList())
第二ソート項目をthenComparing()でつなげるだけ
return objectList.stream().sorted(Comparator.comparing(Work::getReward).thenComparing(Work::getTimeToFinish)).collect(Collectors.toList())
※Workはクラス名、getTimeToFinishなどはゲッターメソッド=メソッド参照
Comparatorには下記のメソッドがある
ソートを行うためめの
キー抽出関数 e を指定してコンパレータを生成
.sorted(Comparator.comparing(Item::getId))
キー抽出関数eとソート条件指定の コンパレータcを指定
ソート条件を指定する場合は第二引数に Comparator を渡す
.sorted(Comparator.comparing(Item::getId,Comparator.reverseOrder())
複合条件を追加したコンパレータを生成(e はキー抽出関数)
.sorted(Comparator.comparing(Item::getId).thenComparing(Item::getName))
比較メソッドの引数に設定して使用する
自然順序付けのコンパレータ
// 昇順.sorted(Comparator.comparing(Item::getId,Comparator.naturalOrder())
逆順コンパレータ
// 降順.sorted(Comparator.comparing(Item::getId,Comparator.reverseOrder())
null を最小値,または最大値とみなすコンパレータ
(cはComparator.naturalOrder() or Comparator.reverseOrder())を設定
ソートキーに null を含む場合は NullPointerException となるため
Comparator.nullsFirst() などで null 時の挙動を指定することで、
NullPointerException を回避できる
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について