• 1.8新特性Comparator


    一、普通排序:

    1   @Test
    2     public void testComparator() {
    3         List<Integer> list = Arrays.asList(1, 9, 3, 5, 0, 8);
    4         list.sort(Comparator.naturalOrder());
    5         System.out.println("升序:" + list);
    6 
    7         list.sort(Comparator.reverseOrder());
    8         System.out.println("降序:" + list);
    9     }

    结果为:

    升序:[0, 1, 3, 5, 8, 9]
    降序:[9, 8, 5, 3, 1, 0]

    二、根据对象属性排序:

    1.根据属性排序

     1     public void testComparator() {
     2         List<Person> personList = new ArrayList<>();
     3         personList.add(new Person("Tom", 2));
     4         personList.add(new Person("Jerry", 4));
     5         personList.add(new Person("Lucy", 7));
     6         personList.add(new Person("Lily", 7));
     7 
     8         // 年龄升序
     9         personList.sort(Comparator.comparing(Person::getAge));
    10         System.out.println("年龄升序:" + personList);
    11 
    12         // 年龄降序
    13         personList.sort(Comparator.comparing(Person::getAge).reversed());
    14         System.out.println("年龄降序:" + personList);
    15 
    16         // 先年龄降序再名字升序
    17         personList.sort(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName));
    18         System.out.println("先年龄降序再名字升序:" + personList);
    19     }

    person对象:

     1 public class Person {
     2     private String name;
     3     private Integer age;
     4 
     5     public Person(String name, Integer age) {
     6         this.name = name;
     7         this.age = age;
     8     }
     9 
    10     public Integer getAge() {
    11         return age;
    12     }
    13 
    14     @Override
    15     public String toString() {
    16         return "Person [name=" + name + ", age=" + age + "]";
    17     }
    18 }
    View Code

    结果为:

    年龄升序:[Person [name=Tom, age=2], Person [name=Jerry, age=4], Person [name=Lucy, age=7], Person [name=Lily, age=7]]
    年龄降序:[Person [name=Lucy, age=7], Person [name=Lily, age=7], Person [name=Jerry, age=4], Person [name=Tom, age=2]]
    先年龄降序再名字升序:[Person [name=Lily, age=7], Person [name=Lucy, age=7], Person [name=Jerry, age=4], Person [name=Tom, age=2]]

     2.根据属性类型排序

    根据int double 。。。排序 :即根据对象的  int double 。。。排序;

    例如:

    Comparator.comparingInt(Person::getAge).reversed().thenComparing(Person::getName))

    3.排序对象存在null的情况:

     1    @Test
     2     public void testComparator() {
     3         List<Person> personList = new ArrayList<>();
     4         personList.add(new Person("Tom", 2));
     5         personList.add(new Person("Jerry", 4));
     6         personList.add(new Person("Lucy", 7));
     7         personList.add(new Person("Lily", 7));
     8 
     9         personList.add(null);
    10         // null的排序
    11         personList.sort(
    12                 Comparator.nullsFirst(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName)));
    13         System.out.println("null排第一:" + personList);
    14     }

    三、比较器的常规用法:

    八(三)、常用类之比较器Comparable Comparator 

  • 相关阅读:
    mahout in Action研读(1)-给用户推荐图书
    工作的时候用到spring返回xml view查到此文章亲测可用
    Result Maps、Auto-mapping、cache
    MyBatis构建sql时动态传入表名以及字段名
    How to Write a Spelling Corrector用java 写拼写检查器 Java实现 以备查验
    245. Shortest Word Distance III
    244. Shortest Word Distance II
    243. Shortest Word Distance
    148. Sort List
    23. Merge k Sorted Lists
  • 原文地址:https://www.cnblogs.com/lixiuming521125/p/15829093.html
Copyright © 2020-2023  润新知