Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

299
Vistas
Inicializar un EnumMap de todos los valores de enumeración

Tengo una clase de enumeración:

 enum class E { A, B, C, D }

¿Cuál es la mejor manera de inicializar un EnumMap que contiene todos los valores de E como claves, cada uno con un valor inicial de 0?

 val map = ...? assert(map is EnumMap<E, Int>) assert(map[EA] == 0) assert(map[EB] == 0) assert(map[EC] == 0) assert(map[ED] == 0)

Lo más conciso que se me ocurre es:

 val map = E.values().associateWithTo(EnumMap(E::class.java)) { 0 }

Sin embargo, la repetición del nombre E rompe el principio DRY. Y la palabra associateWithTo es un poco complicada. ¿Hay una manera más concisa y legible? Desearía que hubiera algo como EnumMap.allOf() al igual que EnumSet.allOf() .

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La forma más simple que se me ocurre es:

 val map = EnumMap(E.values().associateWith { 0 })
over 4 years ago · Santiago Trujillo Denunciar

0

Siempre puede crear su propia función de utilidad para este propósito:

 fun main() { val map = enumMap<E, Int> { 0 } } inline fun <reified E : Enum<E>, V> enumMap(valueSelector: (E) -> V): EnumMap<E, V> { return enumValues<E>().associateWithTo(EnumMap(E::class.java), valueSelector) }
over 4 years ago · Santiago Trujillo Denunciar

0

val map = EnumMap(EnumSet.allOf(E::class.java).associateWith { 0 }) // {A=0, B=0, C=0, D=0}

O si desea el mapa con el 'ordinal' (la posición en la enumeración):

 val map = EnumMap(EnumSet.allOf(E::class.java).associateWith(E::ordinal)) // {A=0, B=1, C=2, D=3}

Esta sería la versión para enumeraciones con propiedades personalizadas:

 enum class E(val value: String) { A("AAA"), B("BBB"), C("CCC"), D("DDD") } val map = EnumMap(EnumSet.allOf(E::class.java).associateWith(E::value)) // {A=AAA, B=BBB, C=CCC, D=DDD}
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda