zoukankan      html  css  js  c++  java
  • java实现List<People>的排序

    1、首先新建测试的实体类(People类):

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class People {
        private Integer id;
        private String name;
        private Integer age;
    }

    2、开始测试,代码如下:

    方式一:使用Collections工具类的静态方法sort(List<People> list, Comparator<? super People> c)

    其中,参数1:排序的List集合, 参数2:Comparator接口的子实现(需要重写compare方法来指定排序方式)

    import com.jieku.pojo.People;
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class TestList {
    
        @Test
        public void testSortList(){
            People p1 = new People(101,"a",19); // 准备数据
            People p2 = new People(103,"c",13);
            People p3 = new People(102,"b",14);
            People p4 = new People(104,"d",15);
            People p5 = new People(105,"d",15);
            List<People> ps = new ArrayList<>();    // 新建List
            ps.add(p1); // 往List中放值
            ps.add(p2);
            ps.add(p3);
            ps.add(p4);
            ps.add(p5);
            System.out.println("没有进行年龄排序前:");
            for (People p : ps) {
                System.out.println(p);
            }
            // 使用Collections工具类的sort方法,重写其compare方法
            Collections.sort(ps, new Comparator<People>() {
                @Override
                public int compare(People o1, People o2) {
                    // -1为正序(从大到小)
                    // 1为倒序(从小到大)
                    // 大的在前
                    if(o1.getAge() > o2.getAge()){  // 如果o1的年龄比o2大,则o1排前面
                        return -1;
                    }else if(o1.getAge() == o2.getAge()){
                        return 0;
                    }else{  // 小的在后
                        return 1;
                    }
                }
            });
            System.out.println("按照年龄排序后----------------------");
            for (People p : ps) {
                System.out.println(p);
            }
            System.out.println("按照编号排序后---------------------使用lambda");
            Collections.sort(ps, (o1, o2) -> {
                // 按照id的正序
                if(o1.getId() > o2.getId()){    // id大的排最后
                    return 1;
                }else if(o1.getId() == o2.getId()){
                    return 0;
                }else{  // 否则,id小的排最前面
                    return -1;
                }
            });
            // 打印排序后的结果
            for (People p : ps) {
                System.out.println(p);
            }
        }
    }

    3、测试结果如下:

     方拾二:通过实体类实现Comparable<T>接口,并且实现未实现的方法compareTo(T t),定义其比较规则,然后再通过Collections工具类的sort方法即可实现排序。

    实体类的代码如下:

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @ToString
    public class Dog implements Comparable<Dog>{
        private Integer id;
        private String name;
        private Integer age;
    
        @Override
        public int compareTo(Dog o) {
            return this.getAge() - o.getAge();
        }
    }

    测试类的代码如下:

    @Test
        public void testSortList3(){
            Dog p1 = new Dog(101,"a",19); // 准备数据
            Dog p2 = new Dog(103,"c",13);
            Dog p3 = new Dog(102,"b",14);
            Dog p4 = new Dog(104,"d",15);
            Dog p5 = new Dog(105,"d",15);
            List<Dog> ps = new ArrayList<>();    // 新建List
            ps.add(p1); // 往List中放值
            ps.add(p2);
            ps.add(p3);
            ps.add(p4);
            ps.add(p5);
            System.out.println("没有进行年龄排序前:");
            for (Dog p : ps) {
                System.out.println(p);
            }
            System.out.println("----------------排序后----------------------");
            // 直接使用工具类的sort的方法
            Collections.sort(ps);
            for (Dog p : ps) {
                System.out.println(p);
            }
        }

    执行结果如下:

    至此,测试完成!

  • 相关阅读:
    AI-图像基础知识-01
    使用docker搭建redis-cluster环境
    (转)从零开始学FastAPI(1)-简明的部分官方文档抽取学习篇
    数据可视化之redash(支持43种数据源) (转自https://anjia0532.github.io/2019/07/08/redash/)
    精通Docker第三版 – 第十一章 Portainer: 一个Docker的GUI( 转)
    Python中的gRPC简化指南
    Kafka Consumer Lag Monitoring
    Apache信息头
    由一个问题引起的思考:WEB开发中,使用JSON-RPC好,还是RESTful API好?
    jmeter通过BeanShell,实现对接口参数HmacSHA256加密(转)
  • 原文地址:https://www.cnblogs.com/Nickc/p/12030841.html
Copyright © 2011-2022 走看看