• 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);
            }
        }

    执行结果如下:

    至此,测试完成!

  • 相关阅读:
    The AndroidManifest.xml File
    handlebars简单用法
    高性能跨语言模板引擎Crox
    C++17 新特性
    C++ 14新特性
    [lua]笔记
    [lua]笔记
    delphi关键字
    delphi 基础
    TCP/UDP
  • 原文地址:https://www.cnblogs.com/Nickc/p/12030841.html
Copyright © 2020-2023  润新知