List<Object[]> listChild = query.list();
List<ChildrenDTO> listOfDTO = new ArrayList<>();
//Loop through arraylits of object
for(Object[] org: listOrg){
//How to cast List of object to ist<ChildrenDTO>?
listOfDTO.add(org);
}
我正在遍历对象列表,需要返回listOfDTO。 如何将列表投射到列表?
答案 0 :(得分:1)
因此,首先,您要遍历包含对象数组的列表。
因此,要获取每个对象,您需要有一个嵌套循环,如下所示:
for (Object[] org : listOrg) {
for (int i = 0; i < org.length; i++) {
if (org[i] instanceof ChildrenDTO) {
listOfDTO.add((ChildrenDTO) org[i]);
}
}
}
我不确定100%是否可以将对象强制转换为ChildrenDTO对象,但是如果不能,则可以获取对象值并创建一个新的ChildrenDTO实例,也许是构造函数以获取对象值?
答案 1 :(得分:1)
如果使用Java 8,则应尝试使用流api。
考虑到DTO的构造函数有一个String
参数。
List<Object[]> listChild = query.list();
List<ChildrenDTO> children = listChild.stream().map(x -> new ChildrenDTO(x[0].toString())).collect(Collectors.toList());
答案 2 :(得分:0)
首先,您必须编写一种将一个 Object []转换为一个 ChildrenDTO的方法,例如构造函数:
public ChildrenDTO(Object [] objects) {
// Your code here
}
然后您可以使用以下命令创建这些DTO的列表:
List<ChildrenDTO> listOfDTO = listChild.stream()
.map(ChildrenDTO::new)
.collect(Collectors.toList());
答案 3 :(得分:0)
您可以使用 Java 8流API :
List<Object[]> listChild = ...
List<ChildrenDTO> childrenDtos = listChild.stream()
.flatMap(Arrays::stream)
.filter(object -> Objects.equals(object.getClass(),ChildrenDTO.class))
//.filter(object -> object instanceof ChildrenDTO)
//instead of Objects.equals(class, class), if required
.map(object -> (ChildrenDTO)object)
.collect(Collectors.toList());