有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用流比较和查找对象

我试图将使用流的元素与包含两个子元素的请求中的元素与包含这些元素作为子对象的对象进行比较

例如:

基本对象:

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"
        }
    }

我试图找到一个^ {CD3>}流列表,其中包含了请求和硬件中的所有软件,条件是域可以有更多的软件和硬件,但是它只需要包含软件和硬件就可以考虑匹配。p>

我从

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

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


共 (1) 个答案

  1. # 1 楼答案

    你可以这样做:

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

    诀窍是在软件列表中使用containsAll,而不需要流式传输硬件。只需使用容器