通过带有条件的嵌套列表元素将对象与另一个列表匹配来过滤对象

时间:2019-06-20 14:19:58

标签: java java-8 java-stream

我正在尝试使用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是有效的。

对于上述示例数据,

  1. domain1不是有效的域,因为它仅包含至少一个 partnumber中的一个partNumber1 instance1,但不包含 partnumber中至少有一个instance2
  2. domain2是有效的 域,因为它包含至少一个partnumber partNumber2 来自instance1,并包含至少一个partnumber partNumber3 来自instance2。它可以包含其他零件号,即 好的
  3. 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()

但是由于对流的理解有限,我很难完成此操作

0 个答案:

没有答案