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

308
Visualizações
¿Cómo convierto java.sql.Array a List<MyCustomEnum>?

Tengo rs.getArray("lang"); que es java.sql.Array y el campo lang es un character varying[] . Quiero convertirlo a List<MyEnumLanguage> . Como ejemplo, tengo {fr_FR,en_US} y he usado el siguiente código para convertir que mi IDE no mostró ningún error

 List<MyEnumLanguage> myEnumLanguageList = (List<MyEnumLanguage>) rs.getArray("lang");

pero arroja una excepción org.postgresql.jdbc.PgArray cannot be cast to java.util.List .

Mi MyEnumLanguage es como:

 public enum MyEnumLanguage { en_US { public String getCode() { return "en_US" } }, de_DE { public String getCode() { return "de_DE" } }; private MyEnumLanguage() { } }
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No puede convertir una matriz en List. Su IDE no muestra ningún error porque la conversión ocurre en tiempo de ejecución.

En su lugar, debe usar Arrays.asList(array) , que devuelve una lista que contiene todos los elementos de la matriz. Tenga en cuenta que si desea asignar los elementos de la matriz a otro tipo, puede hacerlo fácilmente con flujos. Ejemplo:

 List<MyEnumLanguage> myEnumLanguageList = Arrays.asList(rs.getArray("lang")) .stream() .map(arrayElement -> convertToMyEnumLanguage(arrayElement)) .collect(Collectors.toList());

donde convertToMyEnumLanguage() toma un elemento de su matriz y devuelve el MyEnumLanguage correspondiente.

Echa un vistazo a esta publicación: https://stackify.com/streams-guide-java-8/

ACTUALIZAR

Inicialmente leí mal la pregunta. Primero debe convertir su PgArray en una matriz java normal, antes de poder usarla en Arrays.asList().

Esto se puede hacer usando el método PgArray.getArray() y luego convertir el objeto devuelto en una matriz del tipo contenedor de pgArray.

ACTUALIZAR 2

Ejemplo mejorado:

En primer lugar, debe definir su enumeración de esta manera:

 public enum MyEnumLanguage { en_US("en_US"), de_DE("de_DE"); private final String code; private MyEnumLanguage(String code) { this.code = code; } public String getCode() { return code; } public static MyEnumLanguage getEnumByCode(String code) { if(code == null || code.isEmpty()) { return null; } for(MyEnumLanguage e : values()) { if(e.getCode().equals(code)) { return e; } } return null; } }

Luego, para asignar su pgArray a una lista:

 Array pgArray = rs.getArray("lang"); String[] langJavaArray = (String[]) pgArray.getArray(); //this returns an Object, so we cast it to a String array List<MyEnumLanguage> myEnumLanguageList = Arrays.stream(langJavaArray) .map(MyEnumLanguage::getEnumByCode) .collect(Collectors.toList()) ;

Tenga en cuenta que la función de mapeo no busca valores nulos. Entonces, si se pasan códigos incorrectos, su lista contendrá valores nulos. Si este no es el resultado deseado, debe realizar las comprobaciones adecuadas y manejar los casos nulos en su función de mapa.

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