如何将以下比较方法合并到一个比较方法(comparator1)和(comparator2)中?
´´´
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"));
}
更新:为了进行比较和排序,我希望“创建最旧的奖金”和“应该激活奖金”
提前非常感谢。 佐拉姆
最佳答案
您可以使用 Java 8 流 api:
bonusList.stream()
.sorted(comparing(Bonus::getDate).thenComparing(Bonus::isActive))
.collect(toList());
您将需要以下导入:
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.toList;
此外,关于您的测试,我建议使用一些工具,它可以在单个语句中执行断言,并为您提供更好的诊断。看看Shazamcrest .
关于java - 通过多个字段比较对象,如何在一个方法中添加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43144267/