Карта фильтрации со списком значений списков

Я пытаюсь использовать потоки для фильтрации карты. Итак, карта имеет вид

<Street,List<Houses>>

где и Street, и Houses являются классами. В классе House есть поле с именем color, которое я хочу отфильтровать. Итак, в основном я хочу отфильтровать эту карту, чтобы получить карту, которая имеет Street в качестве ключей и House цвета blue в качестве значений, т.е.

<Street,List<Houses>> где Houses.color = blue

Есть идеи, как это сделать с потоками?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
75
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это действительно хороший вариант использования Stream.

map.entrySet()
   .stream()
   .collect(Collectors.toMap(
           Entry::getKey,
           e -> e.getValue() // List<Houses>
                 .stream()
                 .filter(h -> h.getColor() == Color.BLUE)
                 .collect(Collectors.toList())
   ));

Трюк, чтобы сделать поток Stream более читабельным

map.entrySet()
   .stream()
   .collect(toMap(Entry::getKey, filterBy(Color.BLUE)));

И метод filterBy

Function<Entry<String, List<MyClass>>, List<MyClass>> filterBy(final Color color) {
    return e -> e.getValue()
                 .stream()
                 .filter(s -> s.getColor() == color)
                 .collect(toList());
}

Другие вопросы по теме