Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

240
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda