Search code examples
javafor-loopjava-stream

3 levels of nested for loop to Java Stream


I am trying to convert normal Java code to Streams but failing to do so. Can anyone please help here?

Here's the code I am trying to convert

Set<Strings> restrictedValues = getRestrictedValues();
for (Customer customer : request.getCustomers()) {
    for (Order order : customer.getOrders()) {
        for (String restrictedValue : restrictedValues) {
            if (order.isItemExcluded(restrictedValue)) {
                response.setExcludedItem(order.getId());
            }
            if (treatment.isItemIncluded(restrictedValue)) {
                response.setIncludedItem(order.getId());
            }
        }
    }
}

What I have done so far is below, I am kinda lost here.

request.getCustomers().stream()
  .forEach(customer->{
     customer.getOrders().stream()
         .forEach(order->{
             order.isItemExcluded(restrictedValue)
                 }).collect(????) //What to do now });</code>

Solution

  • request.getCustomers()
                    .stream()
                    .flatMap(customer -> customer.getOrders().stream())
                    .forEach(order -> {
                        if(restrictedValues.stream().anyMatch(order::isItemExcluded))
                            response.setExcludedItem(order.getId());
                        if(restrictedValues.stream().anyMatch(order::isItemIncluded))
                            response.setIncludedItem(order.getId());
                    }));