java 集合排序多个属性排序方法
sorted 方法
sorted 是对list转换成stream流的方法,不对有有list元素排序,而是返回一个排序后的新list:
如果想第二个排序字段倒序排可以如下写法 thenComparing
如果想倒叙:reversed()
代码:
public class User {
private Integer id;
private String name;
private String address;
private Integer age;
public User(){
}
public User(Integer id, String name, String address, Integer age) {
this.id = id;
this.name = name;
this.address = address;
this.age = age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
", age=" + age +
'}';
}
}var list = new ArrayList<User>();
list.add(new User(1,"aa","aa",1));
list.add(new User(2,"bb","bb",2));
list.add(new User(3,"aa","cc",2));
list.add(new User(4,"dd","dd",1));
//排序
var ls = list.stream()
.sorted(Comparator.comparing(User::getAge,Comparator.nullsLast(Integer::compareTo))
.reversed()
.thenComparing(User::getName,Comparator.nullsLast(String::compareTo)))
.toList();
for (User l : ls) {
System.out.println(l);
}结果:
