代码之家  ›  专栏  ›  技术社区  ›  Er KK Chopra

无法迭代包含链接哈希映射的ArrayList

  •  1
  • Er KK Chopra  · 技术社区  · 6 年前

    我正在尝试迭代 ArrayList 使用for循环的对象类:

    for(PayloadDTO payloadDTO:payloadDTOList) {
        if(payloadDTO.getEntType().equals(CommonConstants.CUSTOMENTTYPEROLEID.RES_ROLE_TYPE)) {
            resRoleNameList.add(payloadDTO.getEntName());
        } 
    }
    

    enter image description here

    这给了我以下错误:

    java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.alnt.fabric.external.model.PayloadDTO
        at com.alnt.fabric.external.rbac.service.ExternalFabricService.loadImpactedUserCount(ExternalFabricService.java:384)
        at com.alnt.fabric.external.rbac.controller.ExternalFabricController.loadImpactedUserCount(ExternalFabricController.java:160)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
    

    所以我尝试用下面的代码来转换它:

    payloadDTOList = convert(payloadDTOList.toString(), List<PayloadDTO.class>);
    
    
        public static <T> T convert(String json, Class<T> type) throws ALNTApplicationException {
        ObjectMapper mapper = new ObjectMapper();
        try {
            return mapper.readValue(json, type);
        } catch (Exception e) {
            throw new ALNTApplicationException(FabricComponentErrorCodes.ACTION_HANDLER_ERROR_CODE,"Object conversion error");
        }
    }
    
    3 回复  |  直到 6 年前
        1
  •  0
  •   Jainik    6 年前

    尝试使用强制转换的for循环

    for (int i=0; i < payloadDTOList.size(); i++) {
        PayloadDTO payloadDTO = (PayloadDTO) payloadDTOList.get(i);       
        if(payloadDTO.getEntType().equals(CommonConstants.CUSTOMENTTYPEROLEID.RES_ROLE_TYPE)) {
          resRoleNameList.add(payloadDTO.getEntName());
        }
    }
    
        2
  •  0
  •   Morteza Jalambadani Robert Beltran    6 年前

    要将JSON数组转换为集合,请使用以下命令:

    payloadDTOList = 
        convert(
            payloadDTOList.toString(),
            TypeFactory.defaultInstance().constructCollectionType( 
                List.class , 
                PayloadDTO.class
            )
        );
    

    并将方法更改为:

    public static <T> T convert(String json, JavaType type) throws ALNTApplicationException {
        ObjectMapper mapper = new ObjectMapper();
        try {
            return mapper.readValue(json, type);
        } catch (Exception e) {
            throw new ALNTApplicationException(FabricComponentErrorCodes.ACTION_HANDLER_ERROR_CODE,"Object conversion error");
        }
    }
    
    
    public static <T> T convert(String json, Class<T> type) throws ALNTApplicationException {
        return convert( 
                json , 
                TypeFactory.defaultInstance().constructType( 
                        type 
                ) 
        );
    }
    
        3
  •  -1
  •   Deepak Kumar    6 年前

    正如我们在快照中看到的,列表 payloadDTOList 属于类型 LinkedHashMap 你想把它分配给 PayloadDTO for(PayloadDTO payloadDTO:payloadDTOList) .

    如果您确定列表中的所有对象 邮递员 属于类型 链接地图 比使用: for(LinkedHashMap map:payloadDTOList)

    如果您不确定列表中的对象类型,请使用normal for loop like。

    for (int i=0; i < payloadDTOList.size(); i++) {
        if(payloadDTOList.get(i) instanceof PayloadDTO)
             PayloadDTO payloadDTO = (PayloadDTO) payloadDTOList.get(i);
        }
    }
    
    推荐文章