• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

更改两个foreach到一个流

java 来源:Adrian 4次浏览

有人可能有任何想法如何将其替换为stream()?更改两个foreach到一个流

for (Customer customer : customers) { 
    if (customer.getProducts() != null && customer.getProducts().getProduct() != null) { 
     for (Product product : customer.getProducts().getProduct()) { 
      if (product.getId().equals(productId)) { 
       return Optional.of(product); 
      } 
     } 
    } 
} 

我知道,第二的foreach我可以替换为:

customer.getProducts().getProduct().stream().filter(a -> a.getId().equals(productId)).findAny(); 

但我怎么能更换一个流都foreachs?


===========解决方案如下:

使用flatMap得到所有Customer s的所有Product中的Stream

Optional<Product> product = 
    customers.stream() 
      .filter(c -> c.getProducts() != null && c.getProducts().getProduct() != null) 
      .flatMap(c -> c.getProducts().getProduct().stream()) 
      .filter(p -> p.getId().equals(productId)) 
      .findFirst(); 

版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)