无法迭代包含链接哈希表的arraylist

时间:2019-02-07 05:31:40

标签: java linkedhashmap

我正在尝试使用for循环遍历Object类的ArrayList实例:

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");
    }
}

4 个答案:

答案 0 :(得分:0)

要将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 
            ) 
    );
}

答案 1 :(得分:0)

尝试使用强制转换进行for循环

    public function searchCustomer($searchString)
//---------------------------------------------------------
{
    $stmt = $this->prepare("SELECT
                                cu_firstname, cu_lastname, id_customer
                            FROM
                                t_customers
                            WHERE 
                                cu_firstname LIKE ':token'
                            OR
                                cu_lastname LIKE ':token'
                            ;");

    $stmt->bindValue(":token", '%'.$searchString. '%', SQLITE3_TEXT);
    $result = $stmt->execute();
    $data = array();
    while ($row = $result->fetchArray(SQLITE3_ASSOC)){
        $data[] = $row;
    }
    return $data;    
}

答案 2 :(得分:0)

您可以迭代 ArrayList 并基于它创建一个新的对象列表。然后您可以使用 forEach 迭代 payloadDTOList2。

@mongomock.patch

答案 3 :(得分:-1)

我们很快就会看到,列表payloadDTOList的类型为LinkedHashMap,您正在尝试在PayloadDTO的{​​{1}}处分配它。

如果您确定列表for(PayloadDTO payloadDTO:payloadDTOList)中的所有对象都属于payloadDTOList类型,而不是像这样使用:LinkedHashMap

如果不确定列表中的对象类型,请使用普通的for循环之类。

for(LinkedHashMap map:payloadDTOList)