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

234
Vistas
¿Cuál es una buena manera de obtener valores ENUM de un ENUM que representa algunos días de la semana?

Tengo un ENUM con solo 3 constantes. Basado en la bandera, llamada fin de weekend , ENUM.values() debería devolver 3 o 2 constantes.

 public enum Weekday { SUNDAY, MONDAY, TUESDAY; } public Weekday[] getDays() { boolean weekend = true; if (weekend){ return Weekday.values() // this will reurn SUNDAY, MONDAY, TUESDAY } else { // when weekend is false return Weekday.values() // it should return on MONDAY, TUESDAY } }

Por favor, sugiera cuál es un buen enfoque razonable para lograr esto. Puedo lograrlo con el siguiente código. Desafortunadamente, el revisor de relaciones públicas no parece estar contento con esto. ¿Podría sugerir un mejor enfoque?

Mi solución.

 EnumMap<Weekday, Integer> days= new EnumMap<>(Weekday.class); days.put(Weekday.MONDAY, 1); days.put(Weekday.TUESDAY, 2); return days.keySet().toArray(new Weekday[0]); // this returns MONDAY and TUESDAY.
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Qué tal si:

 public enum Weekday { SUNDAY, MONDAY, TUESDAY; } public Weekday[] getDays() { boolean weekend = callFromSomeAPI(); return weekend ? Weekday.values() : new Weekday[] {Weekday.MONDAY, Weekday.TUESDAY}; }

Por supuesto, un uso más típico de Enum Weekday sería representar los 7 días de la semana y usar una variable ( por ejemplo, fin de weekend o días de weekdays ) para diferenciar entre días de semana y días de fin de semana. Algo como:

 enum Weekday { MONDAY(false), TUESDAY(false), WEDNESDAY(false), THURSDAY(false), FRIDAY(false), SATURDAY(true), SUNDAY(true); private final boolean weekend; Weekday(boolean weekend) { this.weekend = weekend; } public static Weekday[] getDays(boolean weekend) { return Arrays.stream(values()).filter(i -> i.weekend == weekend).toArray(Weekday[]::new); } }
over 4 years ago · Santiago Trujillo Denunciar

0

La respuesta de dreamcrash es correcta. Agregaré algunas notas.

DayOfWeek

Java proporciona su enumeración en el paquete java.time : DayOfWeek .

No es necesario definir su propio Enum aquí para su propósito.

List no modificable

En lugar de una matriz, puede devolver una List no modificable utilizando métodos convenientes List.of .

 public List< DayOfWeek > getDays() { boolean weekend = callFromSomeAPI(); return weekend ? List.of( DayOfWeek.SUNDAY , DayOfWeek.MONDAY, DayOfWeek.TUESDAY ) : List.of( Weekday.MONDAY, Weekday.TUESDAY ); }

Al no ser modificable, puede mantener una sola copia de cada lista como una constante static para uso repetido.

 static final List< DayOfWeek > WEEKEND = List.of( DayOfWeek.SUNDAY , DayOfWeek.MONDAY , DayOfWeek.TUESDAY ) ; static final List< DayOfWeek > FIRST_WEEKDAYS = List.of( DayOfWeek.MONDAY , DayOfWeek.TUESDAY ) ;

…y…

 public List< DayOfWeek > getDays() { boolean weekend = callFromSomeAPI(); return weekend ? WEEKEND : FIRST_WEEKDAYS ; }

Con la denominación adecuada de tales constantes, su código se vuelve más corto y más legible, mientras que sus intenciones se vuelven más obvias.

Si el programador que llama realmente quiere una matriz, puede llamar a List::toArray .

 … whatever.getDays().toArray( new DayOfWeek[0] ) …

EnumSet

La clase EnumSet proporciona métodos of apariencia similar pero:

  • son modificables .
  • están altamente optimizados para contener objetos enumerados, siendo rápidos de ejecutar y ocupando muy poca memoria.

El iterador EnumSet devuelve la enumeración en el orden de su definición de enumeración. En DayOfWeek , ese orden es de LUNES a DOMINGO según la norma ISO 8601 . Por lo tanto, es posible que este enfoque no funcione para usted si dependiera de que el domingo sea el primero (si es así, siga usando una List ).

 Set< DayOfWeek > getDays( String flag ) { if ( flag.equalsIgnoreCase( "weekend" ) ) // Better to use an enum as your flag rather than error-prone strings. { return EnumSet.of( DayOfWeek.SUNDAY , DayOfWeek.MONDAY , DayOfWeek.TUESDAY ) ) ; // Be aware: This EnumSet will iterate in Monday-Tuesday-Sunday order, the order of their definition in the Enum. } else { return EnumSet.of( DayOfWeek.MONDAY , DayOfWeek.TUESDAY ) ) ; } }
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