将List <object []>转换为List <myclass>

时间:2018-10-22 15:46:34

标签: java

 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。   如何将列表投射到列表?

4 个答案:

答案 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());