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

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

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 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!