龙空技术网

cannot be cast to java.lang.Comparable问题

碎冰冰的萝卜坑 166

前言:

此刻兄弟们对“java的cast”大约比较注重,姐妹们都需要剖析一些“java的cast”的相关资讯。那么小编同时在网摘上搜集了一些有关“java的cast””的相关文章,希望大家能喜欢,我们快快来了解一下吧!

public static List<Map.Entry<String, Long>> sortMapByValue(Map<String, Long> map) throws IOException{		List<Map.Entry<String, Long>> entryList = new ArrayList<Map.Entry<String, Long>>(map.entrySet());				Collections.sort(entryList, new Comparator<Map.Entry<String, Long>>() {			public int compare(Entry<String, Long> me1, Entry<String, Long> me2) {				return (int) me2.getValue().compareTo(me1.getValue());			}		});				return entryList;	} 

​之前遇到了要对Map按value排序的问题,key是String类型,value是Long类型,我是像上面这样解决的,参数map是Treemap类型,程序执行没有什么问题

今天又遇到了类似的问题,只不过key不是String了,是自己定义的一个类,value变成了int类型,将上面的方法泛型稍作修改拿来使用,参数依然使用Treemap,没想到就碰到了异常:cannot be cast to java.lang.Comparable

查阅资料得知这是因为Treemap是有序的,每插入一个键值对,都会自动的对key进行排序,但key是我自己定义的,Treemap不知道该怎么排序,所以就抛出了异常

解决方法有三种:第一种在构造TreeMap时指定一个比较器,这个比较器用于比较两个值,并且返回一个整数值作为他们的比较结果。第二种就是key实现Comparable接口。第三种就是将参数类型改为Hashmap.我采用的第三种发案,经测试达到预期的排序效果

标签: #java的cast