实现排序的几种方式/sorted(o1,o2)

1 实现排序的几种方式

   首先我们先看代码

        List<Person> personList = new ArrayList<>();
        personList.add(new Person("王一",1));
        personList.add(new Person("王二",2));
        personList.add(new Person("王五",5));
        personList.add(new Person("王三",3));
        personList.add(new Person("王四",4));

对于这样的一组集合数据我们有很多种排序方法,今天我们就围绕它来展开讲述。

1.1 用lambda表达式直接进行排序

 输出结果:

 1.2 利用Collections直接进行倒序排序

 Collections.sort(personList, (o1, o2) -> o2.getAge() - o1.getAge());

 1.3 利用Java8中stream流进行排序

   倒序方式1:

  List<Person> collect = personList.stream()
                .sorted(Comparator.comparing(Person::getAge).reversed()).collect(Collectors.toList());

倒序方式2:

  List<Person> reverse = personList.stream()
                .sorted(Comparator.comparing(Person::getAge, Comparator.reverseOrder())).collect(Collectors.toList());
        System.out.println("倒序"+reverse);

正序方式1:

List<Person> sequence = personList.stream()
                .sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList());
        System.out.println("正序:"+sequence);
        //正序:[Person{name='王一', age=1}, Person{name='王二', age=2}, Person{name='王三', age=3}, Person{name='王四', age=4}, Person{name='王五', age=5}]

2 stream流sorted排序中o1,o2分别代表什么

首先需要知道当两个元素比较时,返回一个正数,两个元素的位置不变。若返回一个负数的,则两个元素就调换位置

        List<Person> collect = personList.stream()
                .sorted((o1, o2) ->  1).collect(Collectors.toList());
        System.out.println(collect);

结果:和之前list集合中的顺序一样

        List<Person> collect = personList.stream()
                .sorted((o1, o2) ->  -1).collect(Collectors.toList());
        System.out.println(collect);

结果:list集合中的顺序已经调换

 我们直接直观的输出o1,o2,看给我们打印什么

     List<Person> collect = personList.stream()
                .sorted((o1, o2) ->{
                    System.out.println(o1);
                    System.out.println(o2);
                    return 1;
                }).collect(Collectors.toList());
       

输出结果:

 可以发现原先list集合中有5条数据,但我们输出o1,o2两两比较输出了8条数据。但是我们可以发现按照顺序,list集合中第一条数据和第二条数据开始进行比较时,我们在sort排序中输出的第一条数据o1却是却是我们进行比较的第二条数据。所以sorted中的o1相对来讲是二者比较的第二条数据,o2为二者比较的第一条数据 。

想要了解更多编程小知识,快来关注公众号:爪哇开发吧!每周会不定时的进行更新。

 

 

posted @ 2021-11-13 15:46  小猪不会叫  阅读(305)  评论(0)    收藏  举报  来源