写入"in another format"一个默认映射<String,Integer>默认为Integer 0然后根据条件统计出现次数

Write "in another format" a default map <String,Integer> by default to Integer 0 and then based on condition count the occurrencies

我有一个默认的键值映射

 private Map<String, Integer> output = Stream.of(MyEnumCode.values())
        .collect(Collectors.toMap(e -> e.code, e -> 0));//default EN1:0,ENS:0..

注意我的枚举是这种格式

public enum MyEnum{

EN1("EN1"), ENS("ENS"), ENT("ENT").....;

String code;

MyEnum(String code) {
    this.code = code;
}

之后有一部分代码带有switch语句,根据条件确定MyEnumCodeValue,并再次重复计算这些枚举值的出现次数:

 output.merge(MyEnumCode.code, 1, Integer::sum); //-->outuput like EN1:3,ENS:1 (based on occurrencies)

所以默认情况下我读取这个枚举代码并将它们收集到一个映射中,默认情况下输出 0。 有没有另一种方法可以用另一种方式实现相同的结果?

提前致谢!

您可以避免在映射中添加所有枚举值的第一条语句。

private Map<String, Integer> output = Stream.of(MyEnumCode.values())
        .collect(Collectors.toMap(e -> e.code, e -> 0));//default EN1:0,ENS:0..

除了这样做,您还可以这样做。

private Map<String, Integer> output = new HashMap<>();

并且在将值放入地图时,您可以使用,

output.put(enumKey, output.getOrDefault(enumKey, 1));

但是两个地图的输出可能不同。就像这张地图将只包含那些出现次数超过一个的键。

更新:

private Map<String, Integer> output = Stream.of(MyEnumCode.values())
        .collect(Collectors.toMap(e -> e.code, e -> 0));
//Some statements
//....
//....
output.put(enumKey, output.getOrDefault(enumKey, 0) + 1);

此处输出映射将出现所有枚举键,无论是 0 还是非 0。