我有一個學生物件串列,每個物件都有 3 個屬性。顏色、尺寸及其名稱。我想首先根據它們的顏色按升序對它們進行排序,然后是大小的降序,最后是它們名稱的升序。例如,如果輸入是(第一行名稱、第二行顏色和大小):
Maria Jose
branco P
Mangojata Mancuda
vermelho P
Cezar Torres Mo
branco P
Baka Lhau
vermelho P
JuJu Mentina
branco M
Amaro Dinha
vermelho P
Adabi Finho
branco G
Severina Rigudinha
branco G
Carlos Chade Losna
vermelho P
我希望輸出為:
branco P Cezar Torres Mo
branco P Maria Jose
branco M JuJu Mentina
branco G Adabi Finho
branco G Severina Rigudinha
vermelho P Amaro Dinha
vermelho P Baka Lhau
vermelho P Carlos Chade Losna
vermelho P Mangojata Mancuda
但是,在覆寫我的 compareTo() 方法以便根據我想要的對串列進行排序之后,我得到的輸出為:
branco P Maria Jose
branco P Cezar Torres Mo
branco M JuJu Mentina
branco G Adabi Finho
branco G Severina Rigudinha
vermelho P Mangojata Mancuda
vermelho P Baka Lhau
vermelho P Amaro Dinha
vermelho P Carlos Chade Losna
可以看出,顏色和大小已正確排序,但是我在對名稱進行排序時遇到了麻煩。我嘗試了多種方法,但都沒有奏效。我不明白為什么。下面是我的 compareTo() 方法:
public int compareTo(Student student) {
int value1 = color.compareTo(student.color);
if (value1 < 0) {
int value2 = size.compareTo(student.size);
if (value2 < 0) {
int value3 = name.compareTo(student.name);
if (value3 < 0) {
return value3;
}
}
}
return value1;
}
有人可以幫我嗎?
uj5u.com熱心網友回復:
只有當前面的欄位相等時,您才應該繼續比較其他欄位,這意味著您的compareTo結果是 0,不大于 0。
你可以看看這里。
uj5u.com熱心網友回復:
我假設您要根據顏色的升序對資料進行排序,如果顏色相等,則您要按大小的降序排序,如果大小也相等,則按名稱的升序排序。此外,您的 java 類具有所有這些屬性作為字串型別。
public int compareTo(Student student) {
// If color are not equal, sort ascending on color
if(!this.color.equals(student.color)){
return this.color.compareTo(student.color);
}
// If color are equal, and size is not equal sort descending on size
if(!this.size.equals(student.size)){
return student.size.compareTo(this.size);
}
// If color and size are equal, sort ascending on name
return this.name.compareTo(student.name)
}
uj5u.com熱心網友回復:
該Comparator界面現在提供了更方便地解決您的問題的方法。
將static變數添加到您的類。
static Comparator < Student > comparator =
Comparator
.comparing( Student :: getColor )
.thenComparing( Student :: getSize ).reversed()
.thenComparing( Student :: getName()
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466410.html
