如何将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())
;