我正在尝试使用for循环遍历Object类的ArrayList
实例:
for(PayloadDTO payloadDTO:payloadDTOList) {
if(payloadDTO.getEntType().equals(CommonConstants.CUSTOMENTTYPEROLEID.RES_ROLE_TYPE)) {
resRoleNameList.add(payloadDTO.getEntName());
}
}
这给了我以下错误:
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");
}
}
答案 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)