前言:
此刻兄弟们对“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