使用 list.stream.sorted() 不會(huì)改變?cè)贤诉耄邮盏姆祷刂挡攀桥判蛑蟮臄?shù)據(jù)
1) 自然排序
list = list.stream.sorted().collect(Collectors.toList());
2) 自然排序,降序(注:集合對(duì)象必須實(shí)現(xiàn)Comparable接口)
list = list.stream.sorted(Comparator.reverseOrder()).collect(Collectors.toList());
3) 按某個(gè)字段排序,比如Student類中的name
list = list.stream.sorted(Comparator.comparing(Student::getName)).collect(Collectors.toList());
4) 按某個(gè)字段排序,降序,比如Student類中的name
list = list.stream.sorted(Comparator.comparing(Student::getName).reversed()).collect(Collectors.toList());
5) 按多個(gè)字段排序灭贷,比如Student類中的name,age
list = list.stream.sorted(Comparator.comparing(Student::getName).thenComparing(Student::getAge)).collect(Collectors.toList);
6) 解決排序字段數(shù)據(jù)為null時(shí)報(bào)錯(cuò)
a. 數(shù)據(jù)為null時(shí)排序在最前
list = list.stream.sorted(Comparator.comparing(Student::getName), Comparator.nullsFirst(String::compareTo)).collect(Collectors.toList());
b. 數(shù)據(jù)為null時(shí)排序在最后
list = list.stream.sorted(Comparator.comparing(Student::getName), Comparator.nullsLast(String::compareTo)).collect(Collectors.toList());
總結(jié):
自然排序
stream.sorted();
降序(排序?qū)ο笮鑼?shí)現(xiàn)Comparable接口)
Comparator.reverseOrder()
字段排序
Comparator.comparing(Student::getName)
字段降序
Comparator.comparing(Student::getName).reversed()
多字段排序(先···再···)
Comparator.comparing(Student::getName).thenComparing(Student::getAge)
排序字段為null處理抛猫,不處理為null會(huì)報(bào)空指針
Comparator.nullsLast() // 為null排序在后
Comparator.nullsFirst() //為null排序在前
例如:
Comparator.comparing(Student::getName), Comparator.nullsLast(String::compareTo))
注:nullsLast() 和 nullsFirst() 中需要傳參驰怎,參數(shù)為排序字段對(duì)應(yīng)類型的comparTo方法滤灯;
注:上述字段排序方法可以自由組合,比如多字段排序時(shí)忧饭,第一個(gè)字段升序扛伍,為null數(shù)據(jù)在最后;第二個(gè)字段降序词裤,為null數(shù)據(jù)在最前刺洒。