Выдает исключение, если фильтр возвращает список размером 0 - PullRequest
2 голосов
/ 24 сентября 2019

В следующем коде:

myList.stream()
    .filter(item -> someMethod(item))
    .map(item -> doSomething(item))
    .collect(Collectors.toList());

Как можно сгенерировать RuntimeException, если результатом фильтра является список размером 0 (т.е. ни один элемент не проходит через фильтр)?

Ответы [ 2 ]

3 голосов
/ 24 сентября 2019

Вы можете использовать коллекционирование и затем :

    myList.stream()
            .filter(item -> someMethod(item))
            .map(item -> doSomething(item))
            .collect(Collectors.collectingAndThen(Collectors.toList(), result -> {
                if (result.isEmpty()) throw new RuntimeException("Empty!!");
                return result;
            }));
1 голос
/ 24 сентября 2019

Поскольку прямого пути * 1001 нет * Как проверить, пуст ли поток Java 8? , гораздо предпочтительнее будет код:

List<SomeObject> output = myList.stream()
        .filter(item -> someMethod(item))
        .map(item -> doSomething(item))
        .collect(Collectors.toList());
if (!myList.isEmpty() && output.isEmpty()) {
    throw new RuntimeException("your message");
} 

Другая альтернативадля этого можно использовать noneMatch, для проверки перед выполнением, например:

if (myList.stream().noneMatch(item -> someMethod(item))) {
    throw new RuntimeException("your message");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...