我有以下枚举:
public enum ProductType {
RED_MEAT, POULTRY, FISH, EGGS, NUTS, DAIRY, CERIALS_AND_GRAINS, FRUIT, VEGETABLES, OIL_AND_SUGARS
}
我想使用 enum
中的键创建 map 和空值。我按照this answer尝试过以下代码:
Map<ProductType, DietFrequency> diet = Arrays.stream(ProductType.values())
.collect(Collectors.toMap(productType -> productType, value -> null));
但我得到 NullPointerException
这里。我究竟做错了什么?
最佳答案
我很确定 EnumMap
更适合您的需求。
Map<ProductType, DietFrequency> diet = new EnumMap<>(ProductType.class);
对于枚举值,EnumMap 比 HashMap 更高效。缺省情况下,不存在任何映射关系。根据您的用例,这可能没问题(map.get(RED_MEAT)
返回 null,这似乎是您想要的),但如果您想执行 containsKey() 检查或循环条目,那么您必须显式地将映射设置为 null:
Arrays.stream(ProductType.values()).forEach(v-> diet.put(v, null));
关于java - 流API : create empty map with keys from enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40974700/