java8--排序

Posted heroinss

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java8--排序相关的知识,希望对你有一定的参考价值。

 排序的传统的写法是:

 Collections.sort(
        SortTest.users,
        new Comparator<User>() {
          @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<User>() {
          @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<User>() {
          @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<User, String>() {
                  @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)));
  }

 

 

 

 

以上是关于java8--排序的主要内容,如果未能解决你的问题,请参考以下文章

Java8对中文汉字排序的Comparator实现类

Java8 Stream流

Java8学习笔记

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Java8 Comparator 排序方法