将LinkedHashMap转换为TreeMap

时间:2016-09-08 00:30:41

标签: java

我有一张地图

LinkedHashMap<String, LinkedHashMap<...>>

的地图。

关于值,我的地图深度转换为树图的最佳方法是什么(它们也应该从LinkedHashMap转换为TreeMap)?所以我需要将所有LinkedHashMap替换为TreeMap

我尝试过使用构造函数new TreeMap<>(myLinkedHashMap)。但它并没有转换价值(地图)。

UPD

还有一件事。每个值都可以有一张地图图。

Map <String, Map<String, Map<String, Map<String, ...>>>>

我需要更改结构中的每个LinkedHashMap。

3 个答案:

答案 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;