Grails 如何将数组值从LInkedHashMap转换为列表?
我有一个简单的LinkedHashMapGrails 如何将数组值从LInkedHashMap转换为列表?,grails,groovy,Grails,Groovy,我有一个简单的LinkedHashMap索引: [索引:[909-720-15、EC5640001、BC248001、BC2510001、BC2570001、EA0850002、EA0850003、EA1310005、EA1310006、EA1310008、EA1310009、EA1310010、EA1310011、EA1310012、EB7320001、EB7320002、EB7320003、EB7320004、EB7400001、EB7400002、ED93301、ED93302、ED935
索引
:
[索引:[909-720-15、EC5640001、BC248001、BC2510001、BC2570001、EA0850002、EA0850003、EA1310005、EA1310006、EA1310008、EA1310009、EA1310010、EA1310011、EA1310012、EB7320001、EB7320002、EB7320003、EB7320004、EB7400001、EB7400002、ED93301、ED93302、ED93501]
如何将此地图转换为列表
如果我使用
List valueList = new ArrayList(indexes.values());
我收到一个嵌套列表:[[909-720-15,EC5640001,BC248001,BC250001,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]
并以POST调用的形式将其传递给Java组件,Java中的Map是key和value对。因此,您需要首先决定是否要将
Map
中的所有键转换为List
,或者将Map
中的所有值转换为List
。如果要将整个Map
转换为List
,则它将Map.Entry的List
。看
Map<String, String> map = new LinkedHashMap<>();
map.put("index1", "909-720-15");
map.put("index2", "EC5640001");
map.put("index3", "BC2480001");
map.put("index4", "BC2510001");
List<Map.Entry<String, String>> list = new ArrayList(map.entrySet());
for (Map.Entry<String, String> l : list) {
System.out.println("Key:-" + l.getKey() + " , Value:-" + l.getValue());
}
地图和列表是根本不同的数据类型,因此没有明确的通用机制在两者之间进行转换
任何保留地图中所有信息的方法都会产生一个map.Entry
对象列表或地图中(键、值)对的一些其他表示。比如说,
List<String> list = new ArrayList(map.values());
for (String l : list) {
System.out.println(l);
}
List<Map.Entry<KeyType, ValueType>> entryList = new ArrayList<?>(indexes.entrySet());
正如我在评论中所写,您确实不应该使用泛型类型的原始版本,但如果这超出了您的控制范围,那么您需要强制转换。假设映射中的值是String
s的列表,这似乎是一种合理的方法:
List<String> indexList = (List<String>) indexes.get("indexes");
List indexList=(List)index.get(“index”);
请特别注意,仅仅因为您以原始映射的形式接收数据(如果确实如此),并不意味着您无法转换为正确的参数化类型,特别是因为您仍然需要强制转换。List valueList=index.get(“index”)
List valueList=newarraylist(index.get(“index”))代码>错误:找不到适合ArrayList(对象)的构造函数。什么类型是索引。获取(“索引”)?请给我们一个列表,以便我们可以告诉LinkedHashMap的键/值对的类型。@Karen我怀疑您需要在地图上强制执行更严格的类型绑定,最好是MapI将列表作为地图“值”,并希望将其分配给一个单独的列表更新我的答案。如果它仍然不清楚,那么我认为你需要澄清你的问题更多。
List<String> indexList = (List<String>) indexes.get("indexes");