我有一张地图
LinkedHashMap<String, LinkedHashMap<...>>
的地图。
关于值,我的地图深度转换为树图的最佳方法是什么(它们也应该从LinkedHashMap转换为TreeMap)?所以我需要将所有LinkedHashMap
替换为TreeMap
。
我尝试过使用构造函数new TreeMap<>(myLinkedHashMap)
。但它并没有转换价值(地图)。
UPD
还有一件事。每个值都可以有一张地图图。
Map <String, Map<String, Map<String, Map<String, ...>>>>
我需要更改结构中的每个LinkedHashMap。
答案 0 :(得分:1)
您需要手动将每个键值对添加到新地图中:
Map<String, Map<String, String>> result = new TreeMap();
map.forEach((k, v) -> result.put(k, new TreeMap(v));
或者,您可以复制原件,然后替换值:
Map<String, Map<String, String>> result = new TreeMap(map);
result.replaceAll((k, v) -> new TreeMap(v));
这需要Java 8。
答案 1 :(得分:0)
在Java 1.8中:
Map<String, Map<String, String>> map = new LinkedHashMap<>();
Map<String, String> map1 = new LinkedHashMap<>();
map1.put("3", "3");
map1.put("2", "2");
map1.put("1", "1");
map.put("2", map1);
map.put("1", map1);
System.out.println(map); // {2={3=3, 2=2, 1=1}, 1={3=3, 2=2, 1=1}}
Map<String, Map<String, String>> resultMap = new TreeMap<>();
map.keySet().stream().forEach(key -> resultMap.put(key, new TreeMap<>(map.get(key))));
System.out.println(resultMap); // {1={1=1, 2=2, 3=3}, 2={1=1, 2=2, 3=3}}
答案 2 :(得分:-1)
LinkedHashMap是由链表支持的HashMap
TreeMap是B +树
由于它们是完全不同的数据结构,因此没有选择,只能进行手动复制..没有快捷方式。
请参阅LinkedHashMap的源代码部分
std::vector
没有,也没有必要在TreeMap ..这是一个BST ..请参阅TreeMap.put(K,V)的源代码
/** The head of the doubly linked list. */
private transient Entry<K,V> header;