Дано: список клиентов (с полями «Поставщик» и «Агентство»), Строковое агентство, Поставщик строки.
Цель: проверить, поддерживает ли какой-либо клиент данное агентство И данного поставщика.
У меня есть поток, который должен быть отфильтрован дважды (по двум значениям). Если после первой фильтрации поток пуст, мне нужно проверить его и выдать исключение. Если он не пустой, мне нужно обработать его через второй фильтр (а затем еще раз проверить, если он не пустой).
Я хочу избежать сбора потока в списки, если это возможно (и я не могу использовать anyMatch или считать методы, потому что они терминальные)
В настоящее время мой код выглядит следующим образом:
void checkAgencySupplierMapping(String agency, String supplier) {
List<Customers> 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, которая позволит мне проверять состояние моего потока, не прерывая его?