Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

298
Views
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 answers
Answer question

0

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

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

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!