Java8のComparatorインタフェースで複合ソートする

Java8のComparatorインタフェースで複合ソートする

Comparator.comparingやthenComparingを使用して簡単に複合ソートすることができるようになっていました。

SQLでいうorder by id,ageみたいな感じで昇順にソートしたり降順にソートしたりすることができます。

Comparator<Dto> comparator = Comparator.comparing(Dto::getWeight)
  .thenComparing(Dto::getHeight)
  .thenComparing(Dto::getAge);

Dtoは以下のような感じです。

public class Dto {
  Dto(int age,String name,int height,int weight){
  this.age = age;
  this.name = name;
  this.height = height;
  this.weight = weight;
  // アクセサは省略
}

ソートしたい場合に上記で定義したComparatorをsorted()の引数に指定します。

List<Dto> list = dataList.stream().sorted(comparator).collect(Collectors.toList()); // 注

これでlistが、weight(昇順),height(昇順),age(昇順)の順でソートされます。

注:Java16から以下メソッド追加されました。

.collect(Collectors.toList());

.toList();

コメント

タイトルとURLをコピーしました