java: получить количество всех отдельных ключей и значений в Map <String, Set <String>> [дубликат]

Jan 26 2021

ввод: Map <String, Set> карта

например: map =

    {"a"=[], 
    "b"=["b", "1", "2", "4"]}

ожидаемый результат: 5 («b» отображается как ключ и значение. следует считать за единицу)

это то, что я пробовал до сих пор. Есть лучший способ это сделать?

    Set<String> o = new HashSet<String>();
    o.addAll(m1.keySet());
    o.addAll(m1.values().stream().flatMap(Collection::stream).collect(Collectors.toSet()));
    System.out.println(o.size());

Можно ли выполнить потоковую передачу по набору записей карты, чтобы получить этот результат? Также создание отдельного хеш-набора выглядит ненужным только для подсчета

Ответы

1 Eran Jan 26 2021 at 15:20

Вы можете сделать что-то вроде этого:

Set<String> o = m1.entrySet()
                  .stream()
                  .flatMap(e -> Stream.concat(Stream.of(e.getKey()),e.getValue().stream()))
                  .collect(Collectors.toSet());

то есть создать Stream<String>для каждой записи файла Map.