Получение списка результатов, не содержащихся в одном списке с потоками Java - PullRequest
0 голосов
/ 08 декабря 2018

Допустим, у меня есть список ToFilter объектов, которые выглядят следующим образом:

private class ToFilter {
    String option1;
    String option2;
}

Используя потоки Java, я хочу отфильтровать все элементы, где опция 1 не содержится в опции любого другого объекта 2Так, например, если есть 4 экземпляра ToFilter с:

option1 = C,
option2 = A

option1 = C,
option2 = F

option1 = A,
option2 = B

option1 = A,
option2 = D

C, должны быть отфильтрованы и содержаться в наборе результатов, потому что он имеет записи в option1, но не option2 любого другого объекта.Что-то вроде nonematch(), но это на самом деле возвращает список ToFilter объектов, а не просто логическое значение true.

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Вы можете использовать Stream.noneMatch здесь как:

List<ToFilter> finalResult = filterList.stream()
        .filter(a -> filterList.stream() // use filter if same object could have option 1 and 2 equal
                .noneMatch(toFilter -> a.getOption1().equals(toFilter.getOption2()))) 
        .collect(Collectors.toList());
0 голосов
/ 08 декабря 2018

Я бы использовал два потока, создав набор из всех option2 значений, по которым я проверял бы option1 значения из коллекции:

List<ToFilter> list = ...;

Set<String> option2Set = list.stream()
        .map(ToFilter::getOption2)
        .collect(Collectors.toSet());

List<ToFilter> filtered = list.stream()
        .filter(f -> !option2Set.contains(f.getOption1()))
        .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...