繁体   English   中英

使用流比较和查找对象

[英]Compare and find object using stream

我正在尝试使用来自两个子元素的请求中的流来比较包含这些元素作为子对象的对象的元素。

例如:

基础对象:

public class Domain {
    long id;
    List<Software> softwares;
    List<Hardware> hardwares;
}

子对象:

public class software {
    String part;
    String did;
}

public class hardware {
    String part;
} 

我有一系列softwares和一个hardware的请求,如下所示

    {
    "softwares":[
        {
        "part":"abc",
        "did":"000"
        },
        {
        "part":"bcd",
        "did":"001"
        } 
    ],
    "hardware": {
        "part":"caltop"
        }
    }

我试图找到一个Domain的流表domains包含在请求和硬件与域名可能有更多的软件和硬件条件的所有软件,但它应该只需要包含软件和硬件能够考虑匹配。

我开始

                 domains.stream()
                .filter(domain -> domain.getSoftwares().contains(request.getSoftwares())
                        && domain.getHardwares().stream().anyMatch(request.getHardware()))
                .collect(Collectors.toList());

但这是错误的,我什么也做不了。 我想尝试使用流

您可以这样做:

domains.stream().filter(domain -> 
domain.getSoftwares().containsAll(request.getSoftwares())
&& domain.getHardwares().contains(request.getHardware()))
.collect(Collectors.toList());

诀窍是将containsAll用于软件列表,并且不需要流式传输硬件。 只需使用包含。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM