使用流比较和查找对象

时间:2019-04-17 19:25:06

标签: java java-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的{​​{1}}流列表,其中包含请求和硬件中的所有软件,但条件是Domain可能具有更多的软件和硬件,但只需要包含可以考虑匹配的软件和硬件。

我从

开始
domains

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

1 个答案:

答案 0 :(得分:2)

您可以这样做:

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

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