Grails 如何将数组值从LInkedHashMap转换为列表?

Grails 如何将数组值从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

我有一个简单的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、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");