java 8流存在用于查找值的嵌套列表
我需要找出特征对象是否存在任何值。现在我正在迭代所有循环,以检查值是否存在。代码也不是空安全的java 8流存在用于查找值的嵌套列表,java,for-loop,java-8,java-stream,Java,For Loop,Java 8,Java Stream,我需要找出特征对象是否存在任何值。现在我正在迭代所有循环,以检查值是否存在。代码也不是空安全的 boolean flag; for (ServiceGroup serviceGroup : serviceGroups) { List<Service> services = serviceGroup.getServices(); for (Service service : services) { List<Sub
boolean flag;
for (ServiceGroup serviceGroup : serviceGroups) {
List<Service> services = serviceGroup.getServices();
for (Service service : services) {
List<Subscription> subscriptions = service.getSubscriptions();
for (Subscription subscription : subscriptions) {
List<ComOrderCFS> prss = subscription.getPrss();
for (ComOrderCFS prs : prss) {
List<ComCFSCharacteristsics> characteristsics = prs.getCharacteristics();
for (ComCFSCharacteristsics characteristsic : characteristsics) {
if ("SerialNumber".equals(characteristsic.getName()) && characteristsic.getValue() != null) {
flag = true;
} else {
flag = false;
}
}
}
}
}
}
布尔标志;
用于(服务组服务组:服务组){
List services=serviceGroup.getServices();
用于(服务:服务){
列表订阅=service.getSubscriptions();
用于(订阅:订阅){
List prss=subscription.getPrss();
用于(共订单、共订单、共订单、共订单、共订单、共订单、共订单、共订单、共订单、共订单){
List characteristics=prs.getCharacteristics();
用于(COMCFSCharacteristics特征:特征){
if(“SerialNumber”.equals(characteristic.getName())&&characteristic.getValue()!=null){
flag=true;
}否则{
flag=false;
}
}
}
}
}
}
我在溪流中尝试了我的手,但没有得到想要的o/p
List<ComOrderCFS> prss= serviceGroups.stream().map(ServiceGroup::getServices).flatMap(Collection::stream).map
(Service::getSubscriptions).flatMap(Collection::stream).map(Subscription::getPrss).
findFirst().get();
List prs=serviceGroups.stream().map(ServiceGroup::getServices).flatMap(Collection::stream).map
(服务::getSubscriptions).flatMap(集合::流).map(订阅::getPrss)。
findFirst().get();
在Java8中,是否仍有返回布尔值(如果存在)的方法。
如果解决方案有评论(java 8的新功能),我们将不胜感激
谢谢
编辑:我假设您不希望在每次迭代中覆盖
标志,而是希望验证该列表中的任何一项是否满足条件。标志将始终在if(“SerialNumber.equals”(characteristic.getName())和&characteristic.getValue()!=null)之后以一种方式或另一种方式设置{flag=true;}否则{flag=false;}
意思是:最后一个“特征”决定产生什么值。这真的是你想要的吗?只需使用[.anyMatch(item->YOUR_CONDITION_the item))]谢谢。您能告诉我如何避免空指针异常,但在此代码中添加空检查取决于什么可以为空。@SachinPrakash不知道哪个属性,并且适用于所有可能为null
,您可以通过确保管道中只过滤非空值来做到这一点。它看起来像…过滤器(对象::非空).
return serviceGroups.stream()
.map(ServiceGroup::getServices)
.flatMap(Collection::stream)
.map(Service::getSubscriptions)
.flatMap(Collection::stream)
.map(Subscription::getPrss)
.flatMap(Collection::stream)
.map(ComOrderCFS::getCharacteristics)
.flatMap(Collection::stream)
.anyMatch(characteristsic -> "SerialNumber".equals(characteristsic.getName()) && characteristsic.getValue() != null);