如何将数组值从 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());
(其中 KeyType
和 ValueType
是您的键和值的实际类型的占位符。不清楚您的情况是什么,但也许 String
。)
但据我了解,您想要的是与一个特定键关联的值,表示为列表。实际上,您似乎已经说过,所讨论的值是 already 一个列表,在这种情况下,您不一定需要 "convert" 映射到列表,因为简单从中检索所需的值可能就足够了:
List<ValueType> indexList = indexes.get("indexes"); // if indexes were properly paramterized
正如我在评论中所写,您确实不应该使用泛型类型的原始版本,但如果这超出了您的控制范围,那么您将需要进行强制转换。假设地图中的值是 String
的列表,似乎是这种情况,这将是一种合理的方法:
List<String> indexList = (List<String>) indexes.get("indexes");
请特别注意,仅仅因为您以原始 Map
的形式接收数据(如果确实如此)并不意味着您无法转换为正确的参数化类型,特别是因为您需要无论如何都要投。
我有一个简单的 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());
(其中 KeyType
和 ValueType
是您的键和值的实际类型的占位符。不清楚您的情况是什么,但也许 String
。)
但据我了解,您想要的是与一个特定键关联的值,表示为列表。实际上,您似乎已经说过,所讨论的值是 already 一个列表,在这种情况下,您不一定需要 "convert" 映射到列表,因为简单从中检索所需的值可能就足够了:
List<ValueType> indexList = indexes.get("indexes"); // if indexes were properly paramterized
正如我在评论中所写,您确实不应该使用泛型类型的原始版本,但如果这超出了您的控制范围,那么您将需要进行强制转换。假设地图中的值是 String
的列表,似乎是这种情况,这将是一种合理的方法:
List<String> indexList = (List<String>) indexes.get("indexes");
请特别注意,仅仅因为您以原始 Map
的形式接收数据(如果确实如此)并不意味着您无法转换为正确的参数化类型,特别是因为您需要无论如何都要投。