Java8 ListBean sorted() 排序
Java8 排序使用: stream.sorted(Comparator.comparing)
对于List<Bean>类型的排序,会好处理些,罗列常见的排序情况,直接看代码:
代码;
User
public class User {
private String name;
private Integer age;
private Integer credits;
private double money;
public User(String name, Integer age, Integer credits, double money) {
this.name = name;
this.age = age;
this.credits = credits;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getCredits() {
return credits;
}
public void setCredits(Integer credits) {
this.credits = credits;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
public String toString() {
return "{" + "name='" + name + '\'' + ", age=" + age + ", credits=" + credits + ", money=" + money + '}';
}
}
常见排序
public static void main(String args[]) {
testBeanSorted();
}
public static void testBeanSorted() {
List<User> users = Lists.newArrayList(new User("jack", 17, 10, 1.98),
new User("jenny", 18, 10, 3.35),
new User("mock", 19, 11, 1.52),
new User("odd", 25, 15, 11.78),
new User("tommy", 23, 8, 6.80),
new User("jessica", 15, 13, 2.62));
List<User> ageList = users.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
ageList.forEach(System.out::println);
List<User> reverseAgeList = users.stream().sorted(Comparator.comparingInt(User::getAge).reversed())
.collect(Collectors.toList());
System.out.println("==========倒序排序===========");
reverseAgeList.forEach(System.out::println);
List<User> sortAgainList = users.stream().sorted(Comparator.comparing(User::getName).reversed()
.thenComparing(User::getAge).thenComparing(User::getMoney)).collect(Collectors.toList());
System.out.println("==========先排年龄,后根据钱排===========");
sortAgainList.forEach(System.out::println);
}
处理null的情况
如果排序中,值为null了,要怎么处理呢? 看Comparator里面的方法,会找到答案。
public static void main(String args[]) {
testBeanWithNullSorted();
}
public static void testBeanWithNullSorted() {
List<User> users = Lists.newArrayList(new User("jack", 17, 10, 1.98),
new User("jenny", 18, 10, 3.35),
new User("mock", 19, 11, 1.52),
new User("odd", null, 15, 11.78),
new User("tommy", null, 8, 6.80),
new User("jessica", 15, 13, 2.62));
List<User> filterAgeList = users.stream().filter(e -> e.getAge() != null).sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
System.out.println("==========过滤null===========");
filterAgeList.forEach(System.out::println);
List<User> ageNullFirstList = users.stream().sorted(Comparator.comparing(User::getAge,Comparator.nullsFirst(Integer::compareTo))).collect(Collectors.toList());
System.out.println("==========null排前面===========");
ageNullFirstList.forEach(System.out::println);
List<User> ageNullLastList = users.stream().sorted(Comparator.comparing(User::getAge,Comparator.nullsLast(Integer::compareTo)))
.collect(Collectors.toList());
System.out.println("==========null排后面===========");
ageNullLastList.forEach(System.out::println);
}
总结:
在实际中,经常会遇到值为null的情况,过滤的话不合适;少数null的情况,考虑排后面,反之排前面。Bean处理排序会方便些,如果是List<Map>类型呢? 会有什么区别?
关联文章: sorted排序》" data-link-title="《Listsorted排序》">《List<Map> sorted排序》