我试图使用来自请求的流和两个子元素来比较元素,这些元素包含这些元素作为子对象。
例如:
基础对象:
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
流列表,其中包含请求和硬件中的所有软件,条件是Domain可能有更多的软件和硬件,但它应该只需要包含软件和硬件才能考虑匹配。
我开始了
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作为软件列表,并且不需要流式传输硬件。只需使用包含。