java - 将 List<Object> 转换为 List<Map<String, Object>>

标签 java hashmap

<分区>

我应该知道这一点,但由于某种原因我无法理解。

为什么我不能转换对象列表 List<Object>到 map 列表 List<Map<String, Object>> ?列表中的每个对象都是 Map<String, Object> 类型的对象,那么为什么不能进行转换呢?

我能做的是创建一个 new ArrayList<Map<String, Object>>();并遍历列表并添加带有类型转换的每个项目。

List<Object> dataList;
..
//Why doesn't this work?
List<Map<String, Object>> rxData = (List<Map<String, Object>>)dataList;

//This works, but is there a better way?
rxData = new ArrayList<Map<String, Object>>();
for (Object data : dataList) {
    rxData.add((Map<String, Object>)data);
}

最佳答案

你可以通过双重转换来删除泛型参数:

@SuppressWarnings("‌​unchecked")
List<Map<String, Object>> rxData = 
    (List<Map<String, Object>>) (List<?>) dataList;

这里的意思是,您强制编译器不检查泛型类型,方法是在第一次强制转换时省略它,然后对 List<Map<String, Object>> 进行未经检查的强制转换。 .这是可能的,因为 java 泛型是非 refiable .

原来的错误是由Object引起的与 Map<> 不兼容类型并且在 java 中没有像协变/逆变类型这样的东西(不像 scala 例如)

但是如果 dataList 会有问题不包含 map 。

关于java - 将 List<Object> 转换为 List<Map<String, Object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38964037/

相关文章:

java - 以编程方式在 AEM 中添加节点?

java - Joda-Time 在周期计算中的奇怪行为

Java bug 与非法参数

Java hashmap 不允许调用 get 方法

Java摩尔斯电码翻译器

java - OpenCV 应用程序 - Android 相机一直显示黑屏

java - 如何让 ComputeIfPresent 在 Map 中与 Map 一起工作?

java - 在Java中反向HashMap键和值

java - 将键值合并为另一个具有 java 中重复项的映射的新值

groovy - 拆分 map 的最常规方法是什么?