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); } }
执行结果如下:
至此,测试完成!