java - 通过多个字段比较对象,如何在一个方法中添加?

标签 java compare

如何将以下比较方法合并到一个比较方法(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/

相关文章:

java - 将数组中的数据放入 Android View 中

java - Maven-单元配置文件中无法识别 Pom.xml 属性

python - 比较两个 csv 文件内容并将相似的内容存储到变量中

database - Visual Studio 2010 数据比较自动化

java - 比较另一个类JAVA中的日期和时间类

java - 将可变大小的数组从 C 返回到 Java

Java:确保一个值是可能的值之一

sql - Visual Studio 2012 架构比较 : Column Order and Constraint Names

java - 将 JSON 数组添加到 JSONObject,而不用 JAVA 中 JSON 数组值的引号

windows - 如何自动检测并释放真正发生变化的DLL?