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

执行结果如下:

 

至此,测试完成!

posted @ 2019-12-12 18:13  koooin  阅读(629)  评论(0编辑  收藏  举报