【发布时间】:2016-07-29 11:30:15
【问题描述】:
我有一些这样的代码,我尝试通过 sortby 中给出的键对 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> 或任何其他建议,以便比较器可以比较所有数据类型?
【问题讨论】:
-
你为什么不把最初的
List<Map>变成List<Map<String,String>>? -
因为地图的输入并不总是字符串
-
当你使用原始类型时会发生这种情况。
-
@EkaCahyaPratama 在这里使用原始类型并不是最好的选择。然后您可能想重新考虑地图,并可能将输入包装在类似于不同可能类的通用包装器类中。
-
Map<String, Comparable<?>>怎么样?或new Comparator<Map<? extends Object,? extends Comparable<?>>>().
标签: java list dictionary type-conversion comparator