java中 往treeMap的构造方法中放 new new Comparator() {}编译出错

java中    往treeMap的构造方法中放 new new Comparator<User>() {}编译出错

问题描述:

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

貌似不能对于TreeMap的Value排序的吧?TreeMap的仅key值可以的实现Comparator功能接口,实现自定义排序。若有不正确的地方,请不吝赐教。
图片说明

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));
    }

});