Тестовый список Java 8 сортирует Comparator, а затем сравнивает - PullRequest
0 голосов
/ 23 мая 2018

Как я могу проверить сортировку списка с помощью 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 голосов
/ 23 мая 2018

Ваши утверждения неверны.второй Comparator применяется только в том случае, если первый Comparator возвращает 0, а третий Comparator применяется только в том случае, если первый и второй Comparator s возвращают 0.

Следовательно, Boolean.compare(list.get(i).getY().isX(), list.get(i+1).getY().isX()) должно быть<= 0 только если <code>list.get(i).getA() == list.get(i + 1).getA().

, а list.get(i).getB().compareTo(list.get(i + 1).getB()) должно быть <= 0, только если <code>list.get(i).getA() == list.get(i + 1).getA() и Boolean.compare(list.get(i).getY().isX(), list.get(i+1).getY().isX()) == 0.

...