Итерировать по карте со значениями в виде списка в java 8 - PullRequest
1 голос
/ 04 августа 2020

Перебрать Map<Integer, List<String>> и преобразовать в тип List<KeyPair>. Любой лучший способ сделать это в java 8 (с использованием потоков).

Наивный способ:

final List<KeyPair> keyPairs = Lists.newArrayList();
 for (final Map.Entry<Integer, List<String>> entry : map.entrySet()) {
            for (final String value : entry.getValue()) {
                keyPairs.add(new KeyPair()
                .withHashKey(value)
                .withRangeKey(entry.getKey()));
            }
   }

1 Ответ

6 голосов
/ 04 августа 2020

Сначала переберите набор записей карты, а затем вы можете использовать flatMap для списка значений для ключа карты и создать KeyPair с ключом входа и каждым значением списка и собрать как список.

List<KeyPair> keyPairs = map.entrySet()
       .stream()
       .flatMap(entry -> entry.getValue()
                              .stream()
                              .map(value -> new KeyPair()
                                               .withHashKey(value)
                                               .withRangeKey(entry.getKey())))
       .collect(Collectors.toList());
...