使用列表值列表过滤地图

时间:2019-03-09 16:57:49

标签: java

我正在尝试使用流来过滤地图。所以地图的格式是

<Street,List<Houses>>

其中StreetHouses都是类。 House类具有一个名为color的字段,我希望对其进行过滤。因此,基本上我想对此地图进行过滤,以获得以Street作为键,颜色为House的{​​{1}}作为值,即

blue其中<Street,List<Houses>>

关于如何使用流执行此操作的任何想法?

1 个答案:

答案 0 :(得分:0)

对于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());
}