我有一些像这样的代码,我尝试通过sortby中给出的键对Map of Map中的值进行排序。代码如下:
final String sortby = "first";
List<Map> lm = new ArrayList<Map>();
Map m = new HashMap();
m.put("id", "eka");
m.put("first", "ek");
m.put("last", "a");
lm.add(m);
m = new HashMap();
m.put("id", "adit");
m.put("first", "adi");
m.put("last", "t");
lm.add(m);
for(Object M : lm){
System.out.println(M.toString());
}
Comparator<Map<String,String>> mapComparator = new Comparator<Map<String,String>>() {
public int compare(Map<String,String> m1, Map<String,String> m2) {
return m1.get(sortby).compareTo(m2.get(sortby));
}
};
Collections.sort(lm, mapComparator);
for(Object M : lm){
System.out.println(M.toString());
}
但由于不兼容的数据类型,它无法使用比较器进行比较。如何将Map<>
转换为Map<String,String>
或任何其他建议,以便比较器可以比较所有数据类型?
答案 0 :(得分:1)
您正在使用lm
和m
变量的原始类型。您可以将代码更改为以下内容:
List<Map<String, String>> lm = new ArrayList<>();
Map<String, String> m = new HashMap<>();
// ...
m = new HashMap<>();
// ...
for (Map<String, String> map : lm)
{
// ...
}
// ...
for (Map<String, String> map : lm)
{
// ...
}
请注意,ArrayList
构造函数使用<>
而不是<Map>
,表示推断了作业左侧的类型(Map<String, String>
)。你也可以这样写:
List<Map<String, String>> lm = new ArrayList<Map<String, String>>()
同样适用于HashMap
构造函数。
答案 1 :(得分:1)
{{1}}