Как очистить содержимое списка, который находится внутри значения HashMap, используя поток Java 8 - PullRequest
2 голосов
/ 05 июля 2019

У меня есть HashMap со следующей структурой.Map<String, Container>

Класс Container содержит List.Я хочу очистить содержимое этого списка, чтобы список существовал, но с 0 элементами.Позже я снова добавлю значения.

replaceAll() ожидает BiFunction.Из-за этого следующее дает ошибку компиляции, потому что тип возврата clear() равен void:

personMap.replaceAll((k,v) -> v.getMyList().clear());

Ответы [ 4 ]

5 голосов
/ 05 июля 2019

Вы можете использовать это:

map.values().forEach(i -> i.getMyList().clear());

В качестве альтернативы вы можете использовать это:

map.values().stream()
        .map(Container::getMyList)
        .forEach(List::clear);
2 голосов
/ 05 июля 2019

Итерация вашего Map с forEach потребует BiConsumer<? super K, ? super V> (где K и V являются типами ключа и значения вашего Map), что в конечном итоге позволит вам вызвать voidметоды на элементах.

Например

personMap.forEach((k,v) -> v.getMyList().clear());
0 голосов
/ 05 июля 2019

Прежде всего, если вы нацеливаетесь на конкретный Контейнер: сначала вы должны использовать метод Map.get.

map.get(containerId);

Затем очистить список

map.get(containerId).getList().clear();

Если вы хотите очистить их все (как предлагалось ранее):

map.values().forEach(i -> i.getList().clear());
0 голосов
/ 05 июля 2019

Почему ясно это на первом месте?

map.forEach((k, v) -> v.setMyList(new ArrayList<>()));
...