如何使用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);
});
只有第一个断言有效,其余断言失败。
答案 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。