Сравните и найдите объект, используя поток - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь сравнить элементы, используя потоки из запроса с двумя подэлементами, с объектом, который содержит эти элементы как дочерние объекты.

Например:

базовый объект:

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, который содержит все программное обеспечение в запросе и аппаратное обеспечение, при условии, что в Домене может быть больше программного и аппаратного обеспечения, но ему просто нужно содержать программное и аппаратное обеспечение, чтобы иметь возможность рассмотреть совпадение.

Я начал с

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

, но это неправильно, и я ничего не мог продвинуть.Я хочу попробовать сделать это с помощью потоков

1 Ответ

2 голосов
/ 17 апреля 2019

вы можете сделать что-то вроде этого:

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

Хитрость заключается в том, что для получения списка программного обеспечения нужно использовать содержит все, и нет необходимости передавать потоковое оборудование.просто используйте содержит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...