Java 8 Lista de conversión Mapa

user11042713:

Tengo un problema con la lista de objetos para la conversión Mapa String, lista de objetos. Busco mapa con un nombre llaves de todos los componentes en los coches, y un valor está representado por los coches con este componente

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

Escribo una solución pero en busca de una solución corriente mejor.

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;
}
Eugene:

Usted puede hacerlo con las corrientes también, pero me parece esto un poco más legible:

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;
}

O el uso de la secuencia:

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())
               ));
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=211143&siteId=1
Recomendado
Clasificación