проверьте, содержит ли коллекция ровно один элемент, соответствующий предикату

#java #assertj

#java #assertj

Вопрос:

С помощью Assertj я могу anyMatch проверить, есть ли в коллекции хотя бы один элемент, соответствующий предикату, например

 var list = List.of("abc", "xyz")
assertThat(list).anyMatch(element -> element.endsWith("xyz"));
 

Но как мне проверить, есть ли в коллекции ровно один элемент, соответствующий предикату?

Ответ №1:

Как насчет использования фильтра? https://github.com/assertj/assertj-core/blob/9eceff23e5b019af3d09c3e9bbc58126d51c02b6/src/main/java/org/assertj/core/api/AbstractIterableAssert.java#L3283

 var list = List.of("a", "b", "c!");

assertThat(list)
    .filteredOn(element -> element.endsWith("!"))
    .hasSize(1);

 

Комментарии:

1. кажется, это работает, хотя я бы ожидал, что там будет менее подробный синтаксис

2. Я думаю, есть много возможных способов, которыми люди могут утверждать коллекцию. Возможно, поднимите PR против AssertJ с предложенной вами альтернативой hasOneMatch или чем-то подобным …?