Как получить все значения из внутренних карт карты, используя общий ключ?

1

У меня есть карта карт: HashMap<String, Map<DistinctCode, String>>.

Мне нужно извлечь значение String из внутренних карт, просто используя DistinctCode. Как я могу это сделать в одной строке или инструкции?

Другими словами, мне нужен метод:

mapOfMap.find(distinctcode)

Является ли это выполнимым в одной строке или заявлении?

  • 3
    String string2 = yourMap.get("string1").get(whateverDistinctCodeIs); Это при условии, что HashMap<String1, Map<distinctcode, String2>> yourMap и что String1 и String2 являются классом String .
  • 0
    спасибо за ответ, но я не хочу передавать string1. Я просто хочу сделать это только с помощью whatDistinctCodeIs, так как они различны для всех внешних карт, мне не нужно передавать это.
Показать ещё 9 комментариев
Теги:
java-8
java-stream

4 ответа

3

В Java 8

List<String> list = map.values().stream().map(m -> m.get(distinctcode)).filter(Objects::nonNull).collect(Collectors.toList());
  • 2
    Не знал Objects.nonNull . (+1)
2

С Java 8 вы можете делать

Set<String> strings = mapOfMaps.values().stream()
           .map(m -> m.get(distinctCode))
           .filter(v -> v != null)
           .collect(Collectors.toSet());
0

Несколько иной подход Java 8 без нулевой фильтрации:

final Set<String> values = mapOfMaps.values().stream()
            .filter(m -> m.containsKey(distinctCode))
            .map(m -> m.get(distinctCode))
            .collect(Collectors.toSet()); //this can be simplified using a static import
0
DistinctCode dv = ...;

Stream<String> res = 
    mom.values().stream().map(p->p.get(dv)).filter(p->p!=null);
  • 0
    Спасибо! Мне нужно было что-то вроде этого.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню