我正在尝试使用Java8流过滤和收集具有条件的对象
我有一个实例列表,其中包含一个嵌套的元素列表
public class Model {
List<Instance> instances;
}
public class Instance {
private String name;
List<Element> elements;
}
public class Element {
private String partNumber;
}
下面是示例josn
{
"instances": [
{
"name": "instance1",
"elements": [
{
"partNumber": "partNumber1"
},
{
"partNumber": "partNumber2"
}
]
},
{
"name": "instance2",
"elements": [
{
"partNumber": "partNumber3"
},
{
"partNumber": "partNumber4"
}
]
}
]
}
和其他响应对象
public class Response {
private List<Domain> domains;
}
public class Domain {
private String name;
private List<Hardware> hardwares;
}
public class Hardware {
private String partNumber;
}
样本json
{
"domains": [
{
"name": "domain1",
"hardwares": [
{
"partNumber": "partNumber1"
}
]
},
{
"name": "domain2",
"hardwares": [
{
"partNumber": "partNumber2"
},
{
"partNumber": "partNumber3"
},
{
"partNumber": "partNumber4"
}
]
},
{
"name": "domain3",
"hardwares": [
{
"partNumber": "partNumber5"
},
{
"partNumber": "partNumber6"
}
]
}
]
}
我试图通过比较来自域至少{1}的请求是否包含来自请求的每个元素的Hardwares
来流式传输和收集响应对象。这意味着partnumber
hardware
中应该存在Instance
中每个Domains
中至少有一个hardwares
,这样才能认为Domain
是有效的。
对于上述示例数据,
partnumber
中的一个partNumber1
instance1
,但不包含
partnumber
中至少有一个instance2
partnumber
partNumber2
来自instance1
,并包含至少一个partnumber
partNumber3
来自instance2
。它可以包含其他零件号,即
好的partnumber
中至少有一个instance1
,并且不包含
partnumber
中至少有一个instance2
我开始写
request.getInstances().stream().flatMap(instance -> instance.getElement().stream().filter(element -> response.getDomains().stream().flatMap(domain -> domain.getHardwares.stream().anyMatch(hardware-> element.contains()
但是由于对流的理解有限,我很难完成此操作