1. 程式人生 > >java8--排序

java8--排序

例如 private pri info fun img 分享 nco getc

排序的傳統的寫法是:

 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--排序