您好想弄清楚如何映射到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);
答案 0 :(得分:10)
toMap
method。默认情况下,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)));
参数是:
key
提取器value
提取器Map
中,另一个要添加。在这种情况下,我们只需抛出一个IllegalArgumentException
,因为键应该是唯一的EnumMap
。您的代码备注:
interface
- Map
而不是EnumMap
enum
是单身,因此您可以使用a != Enum.VALUE
import static
Function.identity()
使{更简洁