首页 > 解决方案 > 如何将数组值从 LInkedHashMap 转换为 List?

问题描述

我有一个简单的 LinkedHashMap indexes

[indexes: [909-720-15, EC5640001, BC2480001, BC2510001, BC2570001, EA0850002, EA0850003, EA1310005, EA1310006, EA1310008, EA1310009, EA1310010, EA1310011, EA1310012, EB7320001, EB7320002, EB7320003, EB7320004, EB7400001, EB7400002, ED93301, ED93302, ED93501]]

如何将此地图转换为List?

如果我使用

List valueList = new ArrayList(indexes.values());

我收到一个嵌套列表:[[909-720-15, EC5640001, BC2480001, BC2510001, BC2570001, EA0850002, EA0850003, EA1310005, EA1310006, EA1310008, EA1310009, EA1310010, EA1310011, EA1310012, EB7320001, EB7320002, EB7320003, EB7320004, EB7400001, EB7400002, ED93301, ED93302, ED93501]]

我在一个单独的 Groovy 组件中初始化了我的 LinkedHashMap:

def indexes = [indexes:indexes]

并将其传递给 Java 组件的 POST 调用主体

标签: grailsgroovy

解决方案


Maps 和 Lists 是根本不同的数据类型,因此没有明确的通用机制在两者之间进行转换。

保留映射中存在的所有信息的任何方式都会产生Map.Entry对象列表或映射中(键,值)对的某些其他表示形式。例如,

List<Map.Entry<KeyType, ValueType>> entryList = new ArrayList<?>(indexes.entrySet());

(您的键和值的实际类型的占位符在哪里KeyType和是占位符。目前尚不清楚在您的情况下这些是什么,但也许是。)ValueTypeString

但据我了解,您想要的是与一个特定键关联的值,表示为列表。事实上,您似乎已经说过所讨论的值已经是一个列表,在这种情况下,您不一定需要将映射“转换”为列表,因为简单地从中检索想要的值可能就足够了:

List<ValueType> indexList = indexes.get("indexes");  // if indexes were properly paramterized

正如我在评论中所写,你真的不应该使用泛型类型的原始版本,但如果这超出了你的控制范围,那么你需要强制转换。假设您的地图中的值是Strings 的列表,似乎是这种情况,这将是一种合理的方法:

List<String> indexList = (List<String>) indexes.get("indexes");

请特别注意,仅仅因为您以原始形式接收数据Map(如果确实如此)并不意味着您无法转换为正确参数化的类型,尤其是因为无论如何您都需要进行转换。


推荐阅读