Hoo*_*ook 4 java collections enums java-8 java-stream
嗨试图找出如何映射到EnumMap没有成功.目前我正在分2步完成,我创建了地图,然后我将其设为EnumMap.问题是.
从效率的角度来看,最好从输入中获取值,使它们成为集合然后流式传输,或者仅使用toMap,因为它现在是正确的.谢谢
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);
Run Code Online (Sandbox Code Playgroud)Bor*_*der 13
toMap方法.默认情况下toMap使用HashMap::new的Supplier<Map>-你需要提供一个新的EnumMap来代替.
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)));
Run Code Online (Sandbox Code Playgroud)
参数是:
key提取value提取Map,另一个要添加.在这种情况下,我们只是抛出一个IllegalArgumentException因为键应该是唯一的EnumMap.您的代码注释:
interface- Map不是EnumMapenum 是单身,所以你可以使用 a != Enum.VALUEimport static用于Function.identity()使事情变得更简洁