[英]sorting a list name and date using comparator
我正在嘗試使用比較器實現自定義排序。 到目前為止,我已經能夠按照指定的名稱在列表頂部的順序對列表進行排序,其余的緊隨其后。
碼:
public class SortingTest implements Comparator<SortingTest> {
String name;
Date date;
public SortingTest(String name, Date date) {
this.name = name;
this.date = date;
}
@Override
public int compare(SortingTest o1, SortingTest o2) {
if (this.name.equals(o2.name)) {
return 1;
}
return 0;
}
public static void main(String[] args) {
List<SortingTest> list = new ArrayList<SortingTest>();
Calendar cl = Calendar.getInstance();
Date d = cl.getTime();
SortingTest s1 = new SortingTest("Sas", d);
cl.add(Calendar.DATE, 1);
Date d1 = cl.getTime();
SortingTest s2 = new SortingTest("Dave", d1);
cl.add(Calendar.DATE, 1);
Date d2 = cl.getTime();
SortingTest s3 = new SortingTest("Jabir", d2);
cl.add(Calendar.DATE, 1);
Date d4 = cl.getTime();
SortingTest s5 = new SortingTest("Meina", d4);
cl.add(Calendar.DATE, 1);
Date d5 = cl.getTime();
SortingTest s6 = new SortingTest("Sas", d5);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s5);
list.add(s6);
Collections.sort(list, s1);
System.out.println("After sorting");
for (SortingTest st : list) {
System.out.println(st.name);
}
}
}
當前代碼輸出:
Sas
Sas
Dave
Jabir
Meina
但我想先按名稱對列表進行排序,然后再按日期對列表進行排序。 因此輸出應為:
Sas, 8/6/2015
Sas, 14/6/2015
Dave, 8/6/2015
Jabir, 10/6/2015
Meina, 11/6/205
更新1:
我的標准是我應該能夠傳遞任何名稱(在本例中為“ sas” / s1)並對列表進行排序,以便傳遞的名稱應位於列表的頂部,然后位於其余的頂部。 因此,在上面的示例中,我已將對象s1傳遞給collection.sort方法。 s1擁有名稱“ sas”,在比較方法中,我正在檢查列表中是否有其他元素具有名稱“ sas”,然后給出值1(在列表頂部),如果沒有則給出0。
首先,您可以實現Comparable
而不是Comparator
,這將允許您使用Collections.sort(list)
而不是Collections.sort(list, s1)
。
現在,就我個人而言,我不喜歡更改對象的核心“可比”需求,因為它們可能是出於某種原因而定義的,例如,我更喜歡根據當前需求創建Comparator
。
Collections.sort(list, new Comparator<SortingTest>() {
@Override
public int compare(SortingTest o1, SortingTest o2) {
int result = o1.name.compareTo(o2.name);
if (result == 0) {
result = o1.date.compareTo(o2.date);
} else {
result = -result;
}
return result;
}
});
這基本上是比較每個SortingTest
實例的名稱,如果它們是0
,則它將使用Date
來確定差異。
然后將輸出類似...
Sas Thu Aug 07 12:30:11 EST 2014
Sas Mon Aug 11 12:30:11 EST 2014
Meina Sun Aug 10 12:30:11 EST 2014
Jabir Sat Aug 09 12:30:11 EST 2014
Dave Fri Aug 08 12:30:11 EST 2014
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.