的Java 8周中的访问嵌套前值列出
问题描述:
我有以下类的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来代替上面的循环吗?
答
这里您不需要flatMap
。只需使用filter
来找到匹配的Customer
和map
以获得该Customer
的CustomerId
。
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
非常感谢!到目前为止接近:) –