0
如何在一個比較方法(比較器1)和(比較器2)中組合以下比較方法?通過多個字段比較對象,如何在一個方法中添加?
'''
private List<Bonus> getBonusListSortedByHasAccountAndDate(List<Bonus> bonusList) {
final Comparator<Bonus> comparator1 = new Comparator<Bonus>() {
public int compare(Bonus o1, Bonus o2) {
return Boolean.compare(o1.isActive(), o2.isActive());
}
};
bonusList.sort(comparator1);
List bonusList2 = bonusList;
final Comparator<Bonus> comparator2 = new Comparator<Bonus>() {
public int compare(Bonus o1, Bonus o2) {
return o1.getDate().compareTo(o2.getDate());
}
};
bonusList2.sort(comparator2);
return bonusList2;
}
@Test
public void test() {
List<Bonus> bonus = createBonus();
List<Bonus> getBonusListSortedByHasAccountAndDate = getBonusDTOListSortedByHasAccount2(bonus);
assertThat(getBonusListSortedByHasAccountAndDate.get(0).getName(), is("2"));
assertThat(getBonusListSortedByHasAccountAndDate.get(1).getName(), is("3"));
assertThat(getBonusListSortedByHasAccountAndDate.get(2).getName(), is("1"));
}
更新:我比較和排序我想要「創造最古老的紅利」和「獎金應被激活」
提前很多感謝。 zoram
糟糕!謝謝,修復。 –
這種在Java中是一種穩定的算法,這意味着如果兩個對象被認爲是相等的,它們將不會被重新排序。因此,結果將首先按日期排序,然後按主動(僅在日期相等的情況下才有效)。所以在你的比較器中,你應該首先比較日期,如果它們相等,則比較活動。當然,這一切都取決於OP實際需要的內容 - 只是說你的代碼與OP發佈的內容不一樣:) –
確實如此,但直到我們知道OP實際需要的內容,它才值得編輯。 –