专业的JAVA编程教程与资源

网站首页 > java教程 正文

cannot be cast to java.lang.Comparable问题

temp10 2024-10-26 15:15:44 java教程 9 ℃ 0 评论

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类型,程序执行没有什么问题

cannot be cast to java.lang.Comparable问题

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

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

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表