从所有枚举值初始化 EnumMap

k31*_*159 6 enum-map kotlin

我有一个枚举类:

enum class E { A, B, C, D }
Run Code Online (Sandbox Code Playgroud)

初始化包含所有 E 值作为键且每个初始值为 0 的 EnumMap 的最简洁方法是什么?

val map = ...?
assert(map is EnumMap<E, Int>)
assert(map[E.A] == 0)
assert(map[E.B] == 0)
assert(map[E.C] == 0)
assert(map[E.D] == 0)
Run Code Online (Sandbox Code Playgroud)

我能想到的最简洁的是:

val map = E.values().associateWithTo(EnumMap(E::class.java)) { 0 }
Run Code Online (Sandbox Code Playgroud)

然而,名称的重复E打破了 DRY 原则。而且这个词associateWithTo有点拗口。有没有更简洁易读的方式?我希望有这样的EnumMap.allOf()东西EnumSet.allOf()

Joã*_*ias 13

我能想到的最简单的方法是:

val map = EnumMap(E.values().associateWith { 0 })
Run Code Online (Sandbox Code Playgroud)