2017-10-10 24 views
3

我有以下类的Java 8周中的访问嵌套前值列出

class Customer { 
    List<String> itemCodes; 
    String customerId; 
} 

可以说我有客户名单,我需要与特定itemCode搜索在客户第一的客户在此列表中。

我目前做的方法如下

for (Customer cust : Customers) { 
      if (cust.getItemCodes() != null && cust.getItemCodes().contains("SPECIFIC_CODE")) { 
       return cust.getCustomerId(); 
      } 
} 

我想用Java8

我能得到现在最好的是

customers.stream().flatMap(cust -> cust.getItemCodes().stream()).filter(code -> code.equals("SPECIFIC_CODE")).findFirst(); 

上述循环转换但这返回我值作为项目代码本身可选。但我需要该人的客户ID。问题是,我不确定如何在这里访问lambda的以前的值?

那么有什么办法可以用java8来代替上面的循环吗?

回答

4

这里您不需要flatMap。只需使用filter来找到匹配的Customermap以获得该CustomerCustomerId

return customers.stream() 
       .filter(c -> c.getItemCodes() != null && c.getItemCodes().contains("SPECIFIC_CODE")) 
       .map(Customer::getCustomerId) 
       .findFirst() 
       .orElse(null); // default value in case no match is found 
+1

非常感谢!到目前为止接近:) –