gpt4 book ai didi

java - 使用 Java 8 流嵌套每个循环返回映射

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:42 25 4
gpt4 key购买 nike

我刚开始接触 Java 8 和流,无法找到如何在 Java 8 中编写这段代码:

Map<Integer, CarShop> result = new HashMap<>();     
for (Car car : someListOfCars) {
List<CarProduct> listOfCarProducts = car.getCarProducts();
for (CarProduct product : listOfCarProducts) {
result.put(product.getId(), car.getCarShop());
}
}

有什么帮助吗?

最佳答案

您通常可以使用 .collect 将迭代解决方案直接转换为流:

Map<Integer, CarShop> result = someListOfCars.stream().collect(
HashMap::new,
(map, car) -> car.getCarProducts().forEach(
prod -> map.put(prod.getId(), car.getCarShop())
),
Map::putAll
);

您可以以额外分配为代价使解决方案更加灵活:

Map<Integer, CarShop> result = someListOfCars.stream()
.flatMap(car -> car.getCarProducts().stream()
.map(prod -> new SimpleImmutableEntry<>(prod.getId(), car.getCarShop()))
).collect(toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b));

这将允许您以任何您希望的方式收集。例如,您可以删除 (a,b)->b 以在存在重复 ID 时强制抛出异常,而不是默默地覆盖条目。

关于java - 使用 Java 8 流嵌套每个循环返回映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812316/

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