【发布时间】:2019-06-20 14:19:58
【问题描述】:
我正在尝试使用 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"
}
]
}
]
}
我正在尝试通过比较来自域的 Hardwares 是否包含来自请求的每个元素的 partnumber 来流式传输和收集响应对象。这意味着每个Instance 中至少有一个hardware 应该出现在Domains hardwares 中,以便将Domain 视为有效。
对于上述样本数据,
- domain1 不是有效的域,因为它只包含至少
一个
partnumberpartNumber1来自instance1但不包含 至少一个partnumber来自instance2 - domain2 是有效的
域,因为它至少包含一个
partnumberpartNumber2来自instance1并包含至少一个partnumberpartNumber3来自instance2。它可以包含其他部件号,即 好的 - domain3 不是有效域,因为它不包含
至少一个
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()
但由于我对流的理解有限,我很难完成这项工作
【问题讨论】:
标签: java java-8 java-stream