Цель: проверить, поддерживает ли какой-либо клиент данное агентство И данного поставщика.
У меня есть поток, который нужно отфильтровать дважды (по двум значениям).
Если поток пуст после первой фильтрации, мне нужно проверить его и выбросить исключение. Если он не пуст, мне нужно обработать его через второй фильтр (а затем еще раз проверить, не пуст ли он).
Я хочу избежать сбора потока в списки, если это возможно. (и я не могу использовать методы 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...
}
Подробнее здесь: https://stackoverflow.com/questions/609 ... ream-state
Мобильная версия