gpt4 book ai didi

java - 将 map.values() 返回的 Collection 转换为 List

转载 作者:行者123 更新时间:2023-12-01 16:49:29 32 4
gpt4 key购买 nike

我已经尝试了我所知道的一切以及我在网上找到的所有内容,但它不起作用。我不断得到:

java.lang.ClassCastException:java.util.LinkedHashMap无法转换为com.mycompany.myproject.dto.MyDto

如果有人能告诉我我在下面的代码中做错了什么,我将不胜感激:

List<Map<Long, MyDto>> dtoList = restTemplate.getForObject(myRestUrl + "/some-path/dtoInfo/" + ids, List.class);
Map<Long, MyDto> myMap = dtoList.get(0);
System.out.println("myMap SIZE is: " + myMap.size());
System.out.println("myMap is: " + myMap);

List<MyDto> dtos = new ArrayList<MyDto>(myMap.values());
StringJoiner sj = new StringJoiner(",");
for(MyDto obj : dtos) {
sjStoreIds.add(obj.getId());
}

REST 调用返回一个 List,其中包含一个 HashMap 对象,其“Key”类型为 Long,“Value”为输入MyDto。然后我打印 map 的“大小”和 map 本身。两者都打印正确且预期的信息。

然后我从 map 中提取值列表,如下所示:

List<MyDto> dtos = new ArrayList<MyDto>(myMap.values());

没有问题。

但是,当我尝试浏览转换列表(dtos)中的对象时,如下所示:

for(MyDto obj : dtos) {
sjStoreIds.add(obj.getId());
}

我得到java.lang.ClassCastException: java.util.LinkedHashMap无法转换为com.mycompany.myproject.dto.MyDto for for(MyDto obj : dtos) { 部分。

我的脑子已经转了两个多小时了。 :(

我确信这会是一些非常基本的事情,一旦我知道了,我会感到愤怒和尴尬,但有人可以告诉我我哪里做错了吗?

编辑

以下是我在服务器端的 REST 实现:

    @Override
public List<Map<Long, MyDto>> getInfo(String idValues) {
List<Map<Long, MyDto>> returnList = new ArrayList<>();
Map<Long, MyDto> result = new HashMap<>();

String[] ids = idValues.split(",");
for(String id : ids) {
result.put(Long.parseLong(id), testInfo.get(Long.parseLong(id)));
}

returnList.add(result);

return returnList;
}

上面的“testInfo”是作为 SQL 查询结果构建的 map 。

最佳答案

restTemplate.getForObject返回给您的东西实际上不是 List<Map<Long, MyDto>> 。您显示的所有代码都是类型安全且正确的,但是 getForObject默默地跳过其签名中的类型检查,这让你很痛苦。弄清楚它真正是什么类型。 (从您向我们展示的内容来看,它可能是 List<Map<Long, Map<Something, Something>>> 。)

关于java - 将 map.values() 返回的 Collection 转换为 List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43416999/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com