我正在尝试使用流来过滤地图。所以地图的格式是
<Street,List<Houses>>
其中Street
和Houses
都是类。 House
类具有一个名为color
的字段,我希望对其进行过滤。因此,基本上我想对此地图进行过滤,以获得以Street
作为键,颜色为House
的{{1}}作为值,即
blue
其中<Street,List<Houses>>
关于如何使用流执行此操作的任何想法?
答案 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());
}