Используйте функции map и filter для удаления элементов из набора, который существует в древовидной карте (Коллекции Java) - PullRequest
2 голосов
/ 04 июля 2019

как использовать функцию фильтра для удаления элементов из набора, который существует в древовидной карте, как этоэтот ?и как их использовать?

1 Ответ

4 голосов
/ 04 июля 2019

Проблема с вашим решением состоит в том, что вы передаете List<Map.Entry> в TreeSet::removeAll, когда он ожидает Itterable.

set.removeAll(map.entrySet().stream()
    .filter(x -> x.getValue() > 1)
    .collect(Collectors.toList()));

Что вам нужно сделать, это сопоставить каждый из отфильтрованныхпредметы на integer и собирать их вместо этого.

set.removeAll(map.entrySet().stream()
    .filter(x -> x.getValue() > 1)
    .map(Map.Entry::getValue) // get the value itself and collect those instead.
    .collect(Collectors.toList()));

Вот тест, выполненный:

TreeSet<Integer> set = new TreeSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7));

TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>() {{ 
    put(1, 1); put(2, 2); put(3, 3);
}};

set.removeAll(map.entrySet().stream()
    .filter(x -> x.getValue() > 1)
    .map(Map.Entry::getValue)
    .collect(Collectors.toList()));

System.out.println(set); // prints [1, 4, 5, 6, 7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...