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();
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント