如何将java.sql.Array转换为List<;MyCustomEnum>;?

如何将java.sql.Array转换为List<;MyCustomEnum>;?,java,spring,postgresql,java-8,Java,Spring,Postgresql,Java 8,我有rs.getArray(“lang”)是java.sql.Array,而lang字段是字符变化[]。我想将其转换为列表。作为一个例子,我有{fr\u fr,en\u US},我用下面的代码来转换我的IDE没有显示任何错误 List<MyEnumLanguage> myEnumLanguageList = (List<MyEnumLanguage>) rs.getArray("lang"); 不能将数组强制转换为列表。您的IDE不显示任何arror,因为强制转换发生在

我有
rs.getArray(“lang”)
java.sql.Array
,而
lang
字段是
字符变化[]
。我想将其转换为
列表
。作为一个例子,我有
{fr\u fr,en\u US}
,我用下面的代码来转换我的IDE没有显示任何错误

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

不能将数组强制转换为列表。您的IDE不显示任何arror,因为强制转换发生在运行时

相反,您应该使用
Arrays.asList(array)
方法,该方法返回一个包含数组所有元素的列表。 请注意,如果要将数组的元素映射到另一种类型,可以使用streams轻松地实现这一点。例如:

List<MyEnumLanguage> myEnumLanguageList = Arrays.asList(rs.getArray("lang"))
                .stream()
                .map(arrayElement -> convertToMyEnumLanguage(arrayElement))
                .collect(Collectors.toList());
然后,要将pgArray映射到列表,请执行以下操作:

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())
;
Array pgArray=rs.getArray(“lang”);
String[]langJavaArray=(String[])pgArray.getArray()//这将返回一个对象,因此我们将其转换为字符串数组
列表MyNumLanguageList=
stream(langJavaArray)
.map(MyEnumLanguage::getEnumByCode)
.collect(收集器.toList())
;

请注意,映射函数不检查空值。因此,如果传递了错误的代码,您的列表将包含空值。如果这不是期望的结果,则必须在映射函数中执行适当的检查并处理空情况。

如果没有,则映射它。Arrays.asList()将java语言数组作为参数,它与java.sql.array没有任何相似之处。除此之外,你要么需要对列表进行stream(),要么使用Arrays.stream()。@mtj你说得对,我看错了问题并更新了答案。至于stream()方法,我忘了!
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;
    }
}
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())
;