我总是得到一个ClassCastException。我还想通过键(pizza.title alphabetical)
对Treemap进行排序代码:
public class Pizza implements Comparable<Pizza> {
public String title;
public int rate;
public String date;
public Bitmap picture;
public int id;
@Override
public int compareTo(Pizza another) {
// TODO Auto-generated method stub
return this.title.compareTo(another.title);
}
}
通话:
for (Pizza pizza : list) {
if(map.containsKey(pizza))
{
int i = map.get(pizza.title);
map.remove(pizza.title);
map.put(pizza, i++);
}
else
{
map.put(pizza, 1);
}
}
错误:
10-04 08:27:19.865: ERROR/AndroidRuntime(722): Caused by: java.lang.ClassCastException: com.korn.pizzacounter.Pizza
答案 0 :(得分:8)
您使用TreeMap
:
您使用containsKey
对象致电Pizza
,但使用get
致电remove
和String
。
TreeMap
中的所有键必须相互比较。由于您的Pizza
课程不是Comparable<String>
,因此无效。
答案 1 :(得分:2)
map.get(pizza.title);
我猜你的地图声明会是
Map<String,Integer>
。
因此请使用pizza.title
作为Map#put
和Map#containsKey
等方法的关键。
答案 2 :(得分:1)
地图是从键到值
查看您的代码,您的地图是从披萨到整数(基于您map.put(pizza.title)
的事实)
当你执行get
时,你需要提供一个比萨来获得int
,但是你正在给pizza.title
,这就是你获得类投射异常的地方。
您可以为其指定pizza
,也可以将地图类型更改为字符串为int(例如Map<String,Integer>
)