Hi tried to figure out how to map to a EnumMap without success. At the moment I'm doing it in 2 steps, I create the map and then I make it a EnumMap. Question are.
From efficiency perspective would be better to get Values from input, make them a set and then stream it, or just using toMap as its right now is correct. thanks
Map<CarModel, CarBrand> input...  
final Map<CarBrand, CarsSellers> ret = input.values()
            .stream().filter(brand -> !brand.equals(CarBrand.BMW))
            .collect(toMap(Function.identity(), brand -> new CarsSellers(immutableCars, this.carsDb.export(brand))));
 final EnumMap<CarBrand, CarsSellers> enumMap = new EnumMap<>(CarBrand.class);
    enumMap.putAll(ret);
toMap method.By default a toMap uses HashMap::new as the Supplier<Map> - you need to supply a new EnumMap instead.
final Map<CarBrand, CarsSellers> ret = input.values()
        .stream()
        .filter(brand -> brand != CarBrand.BMW)
        .collect(toMap(
                identity(),
                brand -> new CarsSellers(immutableCars, this.carsDb.export(brand)),
                (l, r) -> {
                    throw new IllegalArgumentException("Duplicate keys " + l + "and " + r + ".");
                },
                () -> new EnumMap<>(CarBrand.class)));
Arguments are:
key extractorvalue extractorMap and one to be added. In this case, we simply throw an IllegalArgumentException as keys should be uniqueEnumMap.Notes on your code:
interface - Map not EnumMap
enum is singleton, so you can use a != Enum.VALUE
import static for Function.identity() makes things less verboseIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With