Java 8测试列表排序Comparator然后比较

时间:2018-05-23 13:27:48

标签: java junit java-8 comparator

如何使用Comparator测试列表排序然后比较

list.sort(Comparator.comparing(ObjectA::getA()) //some int
    .reversed()
    .thenComparing(a -> a.getY().isX()) // some boolean             
    .thenComparing(ObjectA::getB())) // some String

我如何在junit中测试这种类型。我尝试了一下:

IntStream.range(0, list.size() - 1).forEach(i -> {
    assertTrue(list.get(i).getA() >= list.get(i + 1).getA());
    asssertTrue(Boolean.compare(list.get(i).getY().isX(), list.get(i+1).getY().isX()) > 0);
    assertTrue(list.get(i).getB().compareTo(list.get(i + 1).getB()) < 0);
});

只有第一个断言有效,其余断言失败。

1 个答案:

答案 0 :(得分:1)

你的断言是错误的。第二个Comparator仅在第一个Comparator返回0时应用,第三个Comparator仅在第一个和第二个Comparator返回0时应用。

因此,只有Boolean.compare(list.get(i).getY().isX(), list.get(i+1).getY().isX())时,list.get(i).getA() == list.get(i + 1).getA()才应为&lt; = 0。

list.get(i).getB().compareTo(list.get(i + 1).getB())仅在list.get(i).getA() == list.get(i + 1).getA()Boolean.compare(list.get(i).getY().isX(), list.get(i+1).getY().isX()) == 0时才应为&lt; = 0。

相关问题