需求:List集合按照多個字段進行排序
首先得讓排序的實體類實作Comparable類并且重寫它的compareTo方法,在compareTo中你可以自定義排序的規則。如果前者大于後者,則傳回1,若果相等則傳回0,若果前者小于後者,則傳回-1;String字元串比較的時候也會經常用到這個compareTo方法,檢視String類,可以看到它也實作了Comparable類。
建立一個User類:按照id升序,age降序來排序。
package com.entity;
public class User implements Comparable<User>{
private int id;
private int age;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(int id, int age, String name) {
super();
this.id = id;
this.age = age;
this.name = name;
}
@Override
public int compareTo(User o) {
// TODO Auto-generated method stub
if(this.getId()>o.getId())
{
return 1;
}else if(this.getId()<o.getId()){
return -1;
}else{
if(this.getAge()>o.getAge()){
return -1;
}else{
return 1;
}
}
}
}
再建一個Junit測試類
package com.test;
import java.util.ArrayList;
import java.util.Collections;
import org.junit.Test;
import com.entity.User;
public class TestJunit {
@Test
public void test() {
User u1=new User(1, 1, "A");
User u2=new User(3, 2, "B");
User u3=new User(3, 3, "C");
User u4=new User(5, 4, "D");
User u5=new User(5, 5, "E");
ArrayList<User> list=new ArrayList<User>();
list.add(u2);
list.add(u5);
list.add(u3);
list.add(u4);
list.add(u1);
System.out.println("排序前:");
for(int i=0;i<list.size();i++)
{
System.out.println("id:"+list.get(i).getId() +" age:"+list.get(i).getAge() +" name:"+list.get(i).getName());
}
System.out.println("排序後:");
//id升序,age降序排序
Collections.sort(list);
for(int i=0;i<list.size();i++)
{
System.out.println("id:"+list.get(i).getId() +" age:"+list.get(i).getAge() +" name:"+list.get(i).getName());
}
System.out.println("");
}
}
排序結果
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL41kaNRzaq10dRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1AjM0UzMyYTMyETMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
原文見: https://www.jianshu.com/p/e71b8710ce0c