Compratorオブジェクトセットに基づいて、複数の条件を優先度で比較します。
一、背景紹介
日常のjava開発では、オブジェクトの集合に戻る時、オブジェクトのある属性またはいくつかの属性に従って、フロントエンドに並べ替えて展示する必要があります。例えば、最近は問題集に戻りたいです。指定された時間に合わせて並べ替えて、作成時間によって並べ替えて、mysql層で操作するのが面倒で、時間がもったいないです。私たちはプログラムで並べ替えができます。
二、判例コード
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}]
以上は個人の経験ですので、参考にしていただければと思います。