gpt4 book ai didi

java - Map> 到 List 使用 Java 8

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:32:06 26 4
gpt4 key购买 nike

假设我有标题中描述的结构:

Map<String, Map<String, Car>> mapNeighborhood

包含分别由地址和车牌索引的邻域中的所有汽车。我想选择所有红色汽车将它们重新涂成黑色。为完成该任务,我尝试使用 Java 8 将两个 map “扁平化”并获得一个列表。获得列表后,应用谓词我可以仅选择红色汽车并应用重绘。

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 中仅使用一行来实现相同的目的,但我认为您可能会失去可读性。

我的问题是:是否有另一种不那么冗长的方法将 map 展平为列表?也许使用 flatMap。提前致谢。

最佳答案

你不需要中间的 List

mapNeighborhood.values().stream()
.flatMap(byPlate -> byPlate.values().stream())
.filter(Car::isRed)
.forEach(car -> car.repaint(Color.Black))

我认为这比您的代码可读性更高,而且更短。客观上,它在时间和空间上也更有效率。


还要注意 Car::isRed 有点奇怪,因为您需要检查 Car 上所有可能的 Color - 添加一个新的color 为季节,重新实现 Car

Color::isRed 更有意义,Car 实现了 Colored 或类似的东西

interface Colored {
Color getColor();
}

// in Color
public static boolean isRed(Colored colored) {
return Objects.equals(colored.getColor(), RED);
}

关于java - Map<String, Map<String, Car>> 到 List<Car> 使用 Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56123855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com