Лучший способ получить список идентификаторов из значений hashMap - PullRequest
0 голосов
/ 28 августа 2018

У меня есть HashMap с Integer в качестве ключей и List<Employee> в качестве значений. Я хочу получить все Ids от всех Values из HashMap

List<Long> ids = new ArrayList<>();
    hm.forEach((key, value) -> {
        List<Integer> c = value.stream()
                .map(Employee::getId).collect(Collectors.toList());
        ids.addAll(c);
     }

Вот как я сейчас пытаюсь это сделать. Есть ли способ прямой потоковой передачи из значений HashMap и получения всех различных значений?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018
List<Long> ids = hm.values().stream().map(Employee::getId).collect(Collectors.toList());

Здесь мы получили значения в виде потока, отобразили идентификатор сотрудника и собрали в виде списка.

Его не нужно повторно добавлять в список.

0 голосов
/ 28 августа 2018
hm.values()
      .stream()
      .flatMap(List::stream)
      .map(Employee::getId)
      .collect(Collectors.toSet());

Так как вас интересуют только идентификаторы, поток превышает values из HashMap, и поскольку каждый из них List (s), вы должны использовать flatMap, остальное, вероятно, очевидно. Кроме того, так как они различны, как вы говорите, тип возврата Set имеет гораздо больше смысла.

Если вам все еще требуется List, просто используйте:

.... .map(Employee::getId)
     .distinct()
     .collect(Collectors.toList())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...