栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

1 实现排序的几种方式

   首先我们先看代码

        List 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 collect = personList.stream()
                .sorted(Comparator.comparing(Person::getAge).reversed()).collect(Collectors.toList());

倒序方式2:

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

正序方式1:

List 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 collect = personList.stream()
                .sorted((o1, o2) ->  1).collect(Collectors.toList());
        System.out.println(collect);

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

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

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

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

     List 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为二者比较的第一条数据 。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489635.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号