java8--排序
阅读原文时间:2023年07月08日阅读:1

排序的传统的写法是:

Collections.sort(
SortTest.users,
new Comparator() {
@Override
public int compare(User o1, User o2) {
return o1.getAge() - o2.getAge();
}
});

java8里可以有如下实现

/// 第一种法法和它的实现类
SortTest.users.sort((o1, o2) -> o1.getAge() - o2.getAge());
SortTest.users.sort(
new Comparator() {
@Override
public int compare(User o1, User o2) {
return o1.getAge() - o2.getAge();
}
});

// 第二种方式和他的实现类  
SortTest.users.sort(comparingInt(User::getAge));

SortTest.users.sort(  
    comparingInt(  
        new ToIntFunction<User>() {  
          @Override  
          public int applyAsInt(User value) {  
            return value.getAge();  
          }  
        }));

看到comparingInt方法后看了下Comparator接口提供的方法,对于单条件排序的方式有很多,甚至提供了针对null的排序,略臃肿,不过很齐全。

对于多条件比较的,例如传统代码

// 根据姓名,年龄,积分排序洗涤
public static void traditionCombinationCompare() {
Collections.sort(
SortTest.users,
new Comparator() {
@Override
public int compare(User o1, User o2) {
if (o1.getName().equals(o2.getName())) {
if (o1.getAge().equals(o2.getAge())) {
return o1.getAge() - o2.getAge();
} else {
return o1.getCredits() - o2.getCredits();
}
} else {
return o1.getName().compareTo(o2.getName());
}
}
});
}

在java8中很简洁,第二个表达式是我学习的时候查看每个方法原来的参数及实现

private static void traditionCombinationCompareInJava8() {
SortTest.users.sort(
comparing(User::getName).thenComparing(User::getAge).thenComparing(User::getCredits));
SortTest.users.sort(
comparing(
new Function() {
@Override
public String apply(User user) {
return user.getName();
}
})
.thenComparing(
user -> {
return user.getAge();
})
.thenComparing(User::getCredits));

SortTest.users.forEach(user -> System.out.println(JSON.toJSONString(user)));  

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章