Compratorオブジェクトセットに基づいて、複数の条件を優先度で比較します。


一、背景紹介
日常のjava開発では、オブジェクトの集合に戻る時、オブジェクトのある属性またはいくつかの属性に従って、フロントエンドに並べ替えて展示する必要があります。例えば、最近は問題集に戻りたいです。指定された時間に合わせて並べ替えて、作成時間によって並べ替えて、mysql層で操作するのが面倒で、時間がもったいないです。私たちはプログラムで並べ替えができます。
二、判例コード

//    
public class People {
	private Integer id;
	private String name;
	private Integer topTime;//     
	private Integer gmtCreate;//      
	public People(Integer id, String name, Integer topTime, Integer gmtCreate) {
		super();
		this.id = id;
		this.name = name;
		this.topTime = topTime;
		this.gmtCreate = gmtCreate;
	}
 
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getTopTime() {
		return topTime;
	}
	public void setTopTime(Integer topTime) {
		this.topTime = topTime;
	}
	public Integer getGmtCreate() {
		return gmtCreate;
	}
	public void setGmtCreate(Integer gmtCreate) {
		this.gmtCreate = gmtCreate;
	}
 
	@Override
	public String toString() {
		return "People [id=" + id + ", name=" + name + ", topTime=" + topTime + ", gmtCreate=" + gmtCreate + "]";
	}
}

//     
public class PeopleComparator implements Comparator<People>{
 
	@Override
	public int compare(People o1, People o2) {
		int result = 0;
		//           (o1,o2        )
		int topTimeSeq = o2.getTopTime() - o1.getTopTime();
		if(topTimeSeq != 0){
			result = (topTimeSeq > 0) ? 3 : -1;
		}else{
			//         
			topTimeSeq = o2.getGmtCreate() - o1.getGmtCreate();
			if(topTimeSeq != 0){
				result = (topTimeSeq > 0) ? 2 : -2;
			}
		}
		return result;
	}
}

//   
public class PeopleTest {
	public static void main(String[] args) {
		List<People> peopleList = new ArrayList<People>(){
			{
				add(new People(1,"tom1",0,1));
				add(new People(2,"tom2",2,4));
				add(new People(3,"tom3",1,3));
				add(new People(4,"tom4",0,6));
				add(new People(5,"tom5",0,2));
				add(new People(6,"tom6",0,5));
			}
		};
		Collections.sort(peopleList,new PeopleComparator());
		for(People p:peopleList){
			System.out.println(p.toString());
		}
	}
}
テスト結果

Comprator多条件比較

class Card {
    int a;
    int b;
    public Card(int a, int b) {
        this.a = a;
        this.b = b;
    }
    public int getA() {
        return a;
    }
    public int getB() {
        return b;
    }
    @Override
    public String toString() {
        return "Card{" +
                "a=" + a +
                ", b=" + b +
                '}';
    }
}
public class Main {
    public static void main(String[] args) {
        List<Card> list = new ArrayList<>();
        list.add(new Card(0, 2));
        list.add(new Card(1, 1));
        list.add(new Card(1, 0));
        list.add(new Card(1, 0));
        list.add(new Card(2, 0));
        System.out.println(list);
        System.out.println();
        
        Collections.sort(list, new Comparator<Card>() {
            @Override
            public int compare(Card c1, Card c2) {
                // c1 - c2    
                // c2 - c1    
                int res1 = c2.b - c1.b;
                int res2 = c2.a - c1.a;
                //   b     a,      b
                return res1 == 0 ? res2 : res1;
            }
        });
        System.out.println(list);
    }
}
[Card{a=0, b=2}, Card{a=1, b=1}, Card{a=1, b=0}, Card{a=1, b=0}, Card{a=2, b=0}]
[Card{a=0, b=2}, Card{a=1, b=1}, Card{a=2, b=0}, Card{a=1, b=0}, Card{a=1, b=0}]
以上は個人の経験ですので、参考にしていただければと思います。