ilh*_*han 6 java postgresql spring java-8
我有rs.getArray("lang");哪个 isjava.sql.Array和该lang字段是character varying[]。我想将其转换为List<MyEnumLanguage>. 作为一个例子,我{fr_FR,en_US}已经使用了以下代码进行转换,我的 IDE 没有显示任何错误
List<MyEnumLanguage> myEnumLanguageList = (List<MyEnumLanguage>) rs.getArray("lang");
Run Code Online (Sandbox Code Playgroud)
但它抛出异常org.postgresql.jdbc.PgArray cannot be cast to java.util.List。
我的MyEnumLanguage就像:
public enum MyEnumLanguage {
en_US {
public String getCode() { return "en_US" }
},
de_DE {
public String getCode() { return "de_DE" }
};
private MyEnumLanguage() {
}
}
Run Code Online (Sandbox Code Playgroud)
您不能将数组强制转换为 List。您的 IDE 不会显示任何错误,因为转换发生在运行时。
相反,您应该使用Arrays.asList(array)方法,该方法返回一个包含数组所有元素的列表。请注意,如果您想将数组的元素映射到另一种类型,您可以使用流轻松完成此操作。例子:
List<MyEnumLanguage> myEnumLanguageList = Arrays.asList(rs.getArray("lang"))
.stream()
.map(arrayElement -> convertToMyEnumLanguage(arrayElement))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
whereconvertToMyEnumLanguage()获取数组的一个元素并返回相应的MyEnumLanguage.
看看这篇文章: https: //stackify.com/streams-guide-java-8/
更新
最初我读错了这个问题。您必须首先将 PgArray 转换为普通的 java 数组,然后才能在 Arrays.asList() 中使用它。
这可以使用方法来完成PgArray.getArray(),然后将返回的对象转换为 pgArray 包含类型的数组。
更新2
改进示例:
首先,您应该像这样定义枚举:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后将 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())
;
Run Code Online (Sandbox Code Playgroud)
请注意,映射函数不检查空值。因此,如果传递了错误的代码,您的列表将包含空值。如果这不是所需的结果,您必须执行适当的检查并在地图函数中处理 null 情况。
| 归档时间: |
|
| 查看次数: |
6498 次 |
| 最近记录: |