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

How I can convert an array value from LInkedHashMap to the 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]

并在 POST 调用主体中传递给 Java 组件

Map in java 是 'key' 和 'value' 对。因此,您需要先决定是将 Map 中的所有键转换为 List 还是将 Map 中的所有值转换为 List。如果您想将整个 Map 转换为 List,那么它将 List of Map.Entry<K, V>。参见

    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中的值转换成List那么你需要做(for循环只是为了举例),

    List<String> list = new ArrayList(map.values());
    for (String l : list) {
        System.out.println(l);
    }

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

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

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

(其中 KeyTypeValueType 是您的键和值的实际类型的占位符。不清楚您的情况是什么,但也许 String。)

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

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

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

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

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