我刚开始使用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());
}
}
任何帮助?
答案 0 :(得分:8)
您通常可以使用.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));
这将允许您以任何方式收集。例如,如果存在重复的ID而不是静默覆盖条目,则可以删除(a,b)->b
以强制执行异常。