Как исправить удаление дубликатов из списков с лямбда и условием - PullRequest
1 голос
/ 30 марта 2019

Я хочу знать, почему возвращаемый список содержит «1»

List<Integer> a= Arrays.asList(1,2,3,4,5);
List<Integer> b=Arrays.asList(1,7,8,9,10);

a.stream().filter(first -> (b.stream().anyMatch(second -> first.compareTo(second)!=0)))
          .forEach(System.out::println);

Ответы [ 2 ]

4 голосов
/ 30 марта 2019

Я думаю, что вы ищете:

a.stream().filter(first -> !b.contains(first)).forEach(System.out::println);

Здесь результирующий поток будет содержать только значения, которых нет в списке b.

2 голосов
/ 30 марта 2019

Ваше первоначальное решение искало числа в наборе a, которые отличаются хотя бы от одного числа в наборе b.

В случае 1 он отличается от 7 и, таким образом, соответствует.

В данном случае вы, вероятно, искали noneMatch вместо:

a.stream().filter(first -> (b.stream().noneMatch(first::equals)))
      .forEach(System.out::println);

(Конечно, в этом случае проще использовать contains.)

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