gpt4 book ai didi

Java 8 列表到 map 的转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:06:16 27 4
gpt4 key购买 nike

我在将列表对象转换为映射字符串、列表对象时遇到问题。我正在寻找具有汽车中所有组件的键名称的 map ,并且值由具有该组件的汽车表示

public class Car {
private String model;
private List<String> components;
// getters and setters
}

我编写了一个解决方案,但正在寻找更好的流解决方案。

public Map<String, List<Car>> componentsInCar() {
HashSet<String> components = new HashSet<>();
cars.stream().forEach(x -> x.getComponents().stream().forEachOrdered(components::add));
Map<String, List<Car>> mapCarsComponents = new HashMap<>();
for (String keys : components) {
mapCarsComponents.put(keys,
cars.stream().filter(c -> c.getComponents().contains(keys)).collect(Collectors.toList()));
}
return mapCarsComponents;
}

最佳答案

你也可以用流来做,但我觉得这样更具可读性:

public static Map<String, List<Car>> componentsInCar(List<Car> cars) {
Map<String, List<Car>> result = new HashMap<>();
cars.forEach(car -> {
car.getComponents().forEach(comp -> {
result.computeIfAbsent(comp, ignoreMe -> new ArrayList<>()).add(car);
});
});

return result;
}

或者使用流:

public static Map<String, List<Car>> componentsInCar(List<Car> cars) {
return cars.stream()
.flatMap(car -> car.getComponents().stream().distinct().map(comp -> new SimpleEntry<>(comp, car)))
.collect(Collectors.groupingBy(
Entry::getKey,
Collectors.mapping(Entry::getValue, Collectors.toList())
));
}

关于Java 8 列表到 map 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54622030/

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