我为我的应用程序编写了一些DAO对象,它们与oracle数据库(对象关系数据库)进行通信。一切正常,除了这部分代码:
List<Object>grades = new ArrayList<>();
Array gradesList = (Array)rs.getArray("GRADES");
grades = Arrays.asList(gradesList.getArray());
有了这个我得List<Object>
。我真正需要的是List<Grade>
。我搜索了互联网的答案,但我找不到任何答案。我试图从for循环中的成绩列表中转换对象并将它们添加到另一个List但是没有用。它可以以某种方式完成吗?
答案 0 :(得分:1)
您可以先将列表转换为通用列表,然后将其转换为等级列表,将列表转换为其他列表;
List<Grade> gradeList = (List<Grade)(List<?>) grades;
答案 1 :(得分:0)
我找到了解决问题的方法。由于我在我的应用程序中使用了oracle数据库,因此我使用了这些包:
import oracle.sql.ARRAY;
import oracle.sql.Datum;
import oracle.sql.STRUCT;
我需要提一下,我的一个数据库表中的"GRADES"
字段被组织为嵌套表。然后我得到了像这样的Grade对象列表:
List<Grade>grades = new ArrayList<>();
ARRAY gradesList = (ARRAY)rs.getObject("GRADES");
if(gradesList != null && gradesList.length() != 0) {
Datum[] elems = gradesList.getOracleArray();
for(int i = 0; i<elems.length;i++) {
STRUCT gradeInfo = (STRUCT) elems[i];
Object[] gradeInfoValues = gradeInfo.getAttributes();
Grade grade = new Grade();
/*SETTING GRADE OBJECT ATTRIBUTES BY USING gradeInfoValues ARRAY ...*/
grades.add(grade);
}
}
就是这样!
https://docs.oracle.com/cd/A97630_01/java.920/a96654/oraarr.htm
答案 2 :(得分:0)
如果您使用的是Java 8并假设您有List<Object>
,则需要将其转换为List<Grade>
。然后,您可以按照以下方式使用流。
final List<Grade> gradeList = grade.stream()
.filter(Grade.class::isInstance)
.map(Grade.class::cast)
.collect(toList());
filter()
排除会导致类型转换异常的项目。