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)));
  }

原文地址:https://www.cnblogs.com/heroinss/p/9988534.html