【发布时间】:2019-10-01 02:14:28
【问题描述】:
假设我有标题中描述的结构:
Map<String, Map<String, Car>> mapNeighborhood
包含分别按地址和车牌索引的社区中的所有汽车。 我想选择所有红色汽车以将它们重新涂成黑色。为了完成这项任务,我尝试使用 Java 8 将这两个地图“扁平化”并获得一个列表。获得列表后,应用谓词我可以只选择红色汽车并应用重绘。
List<Car> listCars = new ArrayList<Car>();
mapNeighborhood.values().forEach(map -> map.values()
.forEach(car -> listCars.add(car)));
listCars.stream().filter(Car::isRed)
.forEach(car -> car.repaint(Color.Black));
我确信您可以在 Java 8 中仅使用一行代码实现相同的效果,但我认为您可能会失去可读性。
我的问题是:还有另一种不那么冗长的方法可以将地图展平为列表吗?也许使用flatMap。提前致谢。
【问题讨论】:
-
mapNeighborhood.values().forEach(value->value.values().forEach(car -> rePiantIfRed(car))); -
@HadiJ 好吧,这几乎是我最初的解决方案,但将过滤隐藏在方法“repaintIfRed”中。无论如何感谢您的评论。
-
@HadiJ 我已经删除了一个多余的 stream() 应用你的方法。谢谢:-)