使用流比较和查找对象

问题描述 投票:0回答:1

我试图使用来自请求的流和两个子元素来比较元素,这些元素包含这些元素作为子对象。

例如:

基础对象:

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"
        }
    }

我正在尝试找到Domaindomains流列表,其中包含请求和硬件中的所有软件,条件是Domain可能有更多的软件和硬件,但它应该只需要包含软件和硬件才能考虑匹配。

我开始了

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

但这是错的,我无法继续前进。我想尝试使用流做

java java-stream
1个回答
2
投票

你可以这样做:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.