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);