java中 往treeMap的构造方法中放 new new Comparator() {}编译出错
问题描述:
public static void maptree1(Map map) {
Map<String, User> m = new TreeMap<String, User>(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
return o1.compareTo(o2);
}
});
代码是这个
![图片说明](https://img-ask.csdn.net/upload/201811/07/1541588854_676951.png)
答
Comparator 泛型应该是map的key对应的类型,或者是key的super类型
Map<String, User> m = new TreeMap<String, User>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
可以使用List ,把map的entry构造成一个List,然后使用list的比较器,这样就可以比较Entry的value了
List<Map.Entry<String, User>> list = new ArrayList<Map.Entry<String, User>>(m.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, User>>() {
@Override
public int compare(Entry<String, User> o1, Entry<String, User> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
答
你把上面一行的@Override删除掉看看
或者让jdk的版本>6.0
答
User中没有compareTo方法吧,不然也不会报错了.....
答
具体看你要实现什么样的功能
是想在map put进去的时候就对value排序么
除非 key和value有一定的映射关系 比如 value= get(key);
就可以用
Map m = new TreeMap(new Comparator() {
@Override
public int compare(String o1, String o2) {
return get(o1).compareTo(get(o2));
}
});