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




Это действительно хороший вариант использования 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());
}