zoukankan      html  css  js  c++  java
  • 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)));
      }

  • 相关阅读:
    【JAVA】集合的使用:约瑟夫问题
    【JAVA】第八章:集合
    【数据结构】二叉树
    【数据结构】串
    【数据结构】KMP算法
    【java】快速入门:前八章内容总结
    【数据结构】停车场问题
    【实验向】问题:假设计算机A和计算机B通信,计算机A给计算机B发送一串16个字节的二进制字节串,以数组形式表示:
    【数据结构】括号的匹配问题
    CSS
  • 原文地址:https://www.cnblogs.com/heroinss/p/9988534.html
Copyright © 2011-2022 走看看