Обработка Java Stream с if/проверкой состояния потокаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Обработка Java Stream с if/проверкой состояния потока

Сообщение Anonymous »

Дано: список клиентов (с полями «Поставщик» и «Агентство»), строковое агентство, строковый поставщик.

Цель: проверить, поддерживает ли какой-либо клиент данное агентство И данного поставщика.

У меня есть поток, который нужно отфильтровать дважды (по двум значениям).
Если поток пуст после первой фильтрации, мне нужно проверить его и выбросить исключение. Если он не пуст, мне нужно обработать его через второй фильтр (а затем еще раз проверить, не пуст ли он).

Я хочу избежать сбора потока в списки, если это возможно. (и я не могу использовать методы Match или count, потому что они терминальные)

Сейчас мой код выглядит так:

Код: Выделить всё

void checkAgencySupplierMapping(String agency, String supplier) {
List customersFilteredByAgency = allCustomers.stream()
.filter(customer -> customer.getAgency().equals(agency))
.collect(toList());

if (customersFilteredByAgency.isEmpty()) throw new AgencyNotSupportedException(agency);

customersFilteredByAgency.stream()
.filter(customer -> customer.getSupplier().equals(supplier))
.findFirst().orElseThrow(() -> throw new SupplierNotSupportedException(supplier);
}
В этом примере я пропустил некоторые технические подробности фильтрации (например, анализ поставщика в строку).

И Я хочу добиться чего-то вроде этого:

Код: Выделить всё

void checkAgencySupplierMapping(String agency, String supplier) {
allCustomers.stream()
.filter(customer -> customer.getAgency().equals(agency))
.ifEmpty( () -> throw new AgencyNotSupportedException(agency) )
.filter( customer -> customer.getSupplier().equals(supplier)
.ifEmpty( () -> throw new SupplierNotSupportedException(supplier); // or findFirst().orElseThrow...
}
Есть ли какая-либо функция Java 8, которая позволит мне проверить статус моего потока, не прерывая его?

Подробнее здесь: https://stackoverflow.com/questions/609 ... ream-state
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»