[英]Collections sort Java
嗨,大家好,我有3個收藏夾,第一個我想按名稱排序,第二個用於電子郵件,然后最后一個按年齡分類。 我的問題是使用收藏集是否可行?
如果我在sql中這樣做
sort by name,email,age
我知道這行得通嗎?
我正在嘗試在Java中這樣做。
Collections.sort(listPeople, new Comparator<People>() {
@Override
public int compare(final People o1, final People o2) {
return o1.getName().compareTo(o2.getName());
}
});
//then
Collections.sort(listPeople, new Comparator<People>() {
@Override
public int compare(final People o1, final People o2) {
return o1.getEmail().compareTo(o2.getEmail());
}
});
//and then
Collections.sort(listPeople, new Comparator<People>() {
@Override
public int compare(final People o1, final People o2) {
return o1.getAge().compareTo(o2.getAge());
}
});
這行得通? 還是每個集合都覆蓋以前的?
如果我理解正確,則應該在此處使用java-8功能。
Collections.sort(listPeople, Comparator.comparing(People::getName)
.thenComparing(People::getEmail)
.thenComparing(People::getAge));
如果連續對同一集合進行排序,則這些操作將覆蓋其他排序操作的效果。
您可以通過調整自定義比較器來實現。 首先比較名稱 ,如果元素相等,則通過電子郵件進行比較,如果再次相等,則按年齡進行比較。
看一下以下代碼片段:
Collections.sort(listPeople, new Comparator<People>() {
@Override
public int compare(final People o1, final People o2) {
int nameOrder = o1.getName().compareTo(o2.getName());
if (nameOrder != 0) {
return nameOrder;
}
// Elements names are equal, compare by their email
int emailOrder = o1.getEmail().compareTo(o2.getEmail());
if (emailOrder != 0) {
return emailOrder ;
}
// Elements emails are equal, compare by their age
int ageOrder = o1.getAge().compareTo(o2.getAge());
// Return that in any case as we do not have another sorting criteria
return ageOrder;
}
});
從Java 8開始,您可以用更少的代碼實現相同的目的(請參見@Eugene的答案):
Comparator.comparing(People::getName)
.thenComparing(People::getEmail)
.thenComparing(People::getAge));
這將創建與上述相同的比較器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.