这个问题似乎非常受欢迎,但我无法为我的实施获得正确的结果。我以thread为例,但到目前为止还没有运气。
在这里,我需要转换为TreeMap的HashMap,以便对键值进行排序:
HasMap<String, HashMap<String, SomeBean>> hashMap = (HashMap<String, HashMap<String, SomeBean>>)request.getAttribute("HASHMAP");
应用迭代器后,我可以按未排序的顺序看到结果。
现在我想将其转换为TreeMap:
TreeMap<String, TreeMap<String, SomeBean>> treeMap = new TreeMap<String, TreeMap<String, SomeBean>>(hashMap);
结果:
The constructor TreeMap<String,TreeMap<String,SomeBean>>(HashMap<String,HashMap<String,SomeBean>>) is undefined
好吧,看起来因为我已经使用我的bean类嵌套了地图,所以它不允许我创建新的树图。这是可以理解的,因为我不希望TreeMap具有适合我标准的构造函数,但问题是如何找到此问题的解决方法?
答案 0 :(得分:0)
如果您的代码使用嵌套地图作为常规Map
,即它不使用HashMap
或TreeMap
中定义的任何特定方法,您可以定义您的类型参数变量使用Map
代替:
HashMap<String, Map<String, SomeBean>> hashMap =
(HashMap<String, Map<String, SomeBean>>) request.getAttribute("HASHMAP");
TreeMap<String, Map<String, SomeBean>> treeMap =
new TreeMap<String, Map<String, SomeBean>>(hashMap);
否则,您将无法使用constructor(Map)
或putAll(Map)
,而且您必须手动填写treeMap
。
答案 1 :(得分:0)
由于您的地图具有不兼容的值类型,因此您需要手动转换它们:
Map<String, Map<String, SomeBean>> treeMap = new TreeMap<>();
for (Map.Entry<String, HashMap<String, Integer>> e : hashMap.entrySet())
treeMap.put(e.getKey(), new TreeMap<>(e.getValue()));