還是java牛逼,一行程式碼搞定各種排序
阿新 • • 發佈:2020-12-28
排序大家都經常用的吧,下面是個學生類,2 個欄位:id[學號],score[分數],
public class Stu { //編號 private Integer id; //分數 private Integer score; public Stu(Integer id, Integer score) { this.id = id; this.score = score; } // getter、setter大家自己補上 @Override public String toString() {return "Stu{" + "id=" + id + ", score=" + score + '}'; } }
來個集合,放幾個學生進去
List<Stu> stuList = new ArrayList<>(); stuList.add(new Stu(2, 30)); stuList.add(new Stu(1, 30)); stuList.add(new Stu(3, 50)); stuList.add(new Stu(4, 40));
需求:score desc,id asc
stuList.stream().sorted(Comparator.comparing(Stu::getScore).reversed().thenComparing(Stu::getId)).forEach(System.out::println);
Stu{id=3, score=50} Stu{id=4, score=40} Stu{id=1, score=30} Stu{id=2, score=30}
是不是特別簡單,這裡使用到了 java 中的 stream 來操作的,stream 中有個 sorted 方法,需傳入比較器:Comparator,我們傳入的是:
Comparator.comparing(Stu::getScore).reversed().thenComparing(Stu::getId)。
解釋一下程式碼
Comparator.comparing(Stu::getScore) 得到score升序比較器
Comparator.comparing(Stu::getScore).reversed():將score升序比較器反轉,那麼就得到score降序比較器
Comparator.comparing(Stu::getScore).reversed().thenComparing(Stu::getId):注意這裡面用到了thenComparing,這個表示前面的比較器得到的結果相同的時候,走thenComparing函式中指定的比較方式,即按照Stu中的id升序排序。