当前位置: 首页 > 知识库问答 >
问题:

流API:使用枚举[duplicate]中的键创建空映射

上官凯歌
2023-03-14

我有以下枚举:

public enum ProductType {
    RED_MEAT, POULTRY, FISH, EGGS, NUTS, DAIRY, CERIALS_AND_GRAINS, FRUIT, VEGETABLES, OIL_AND_SUGARS
}

我想用枚举和null值中的键创建映射。我试着按照这个答案下面的代码

Map<ProductType, DietFrequency> diet = Arrays.stream(ProductType.values())
        .collect(Collectors.toMap(productType -> productType, value -> null));

但我在这里得到的是NullPointerException。我做错了什么?

共有1个答案

逄念
2023-03-14

我非常肯定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 stream写的最佳做法是什么?

  • 我有上面的列举 @JsonValue公共字符串getValue(){return value;} 部分和一个示例测试类,如。。。 公开课Foo{ 这个测试类打印出来 @jsonValue在作为map键的枚举字段上使用时不工作。 序列化映射时是否有方法将此枚举用作键? 谢谢

  • 问题内容: 我要做什么才能完成此任务?另外,可以说我将其更改为: 我该如何使它符合Decodable? EDit 这是我的完整代码(不起作用) 最终编辑 另外,它将如何处理这样的枚举? 问题答案: 这很简单,只需使用或隐式分配的原始值即可。 被编码到并到 要么 被编码到并到 这是一个简单的示例如何使用它:

  • 假设有一个名为 Type 的简单枚举,定义如下: 为给定的<code>s</code>找到正确的枚举是用带有for循环的静态方法完成的(假设该方法在枚举中定义),例如: 我认为用Stream API表达的功能等价物是这样的: 我们怎样才能写得更好,更简单?这段代码感觉是被迫的,不是很清楚。尤其显得笨拙和滥用,因为它不积累任何东西,不执行任何计算,总是简单地返回(前提是过滤器返回一个值 - 如果它没

  • 从这个问题,有可能注入map与枚举? 例如,我有枚举: 我有一些与实现的接口: 但这样的注入不起作用: 我想自动注入。如何修复它,在spring框架端生成这样的代码?

  • 我正在寻找第一次到流API的Java8。我尝试创建一个筛选器来从映射中删除元素。