我在创建TreeMap时遇到NullPointerException。
这是我的代码:
public TreeMap<AccountGroupBean,List<AccountBean>> getAccountsAndGroups() throws SessionExpiredException {
TreeMap<AccountGroupBean,List<AccountBean>> map = new TreeMap<AccountGroupBean,List<AccountBean>>();
List<AccountGroupBean> groups = getAccountGroups();
for(AccountGroupBean group : groups) {
List<AccountBean> accounts = getAccountsByGroupId(group.getId());
System.out.println("PRINT"+ accounts.size());
map.put(group,accounts);
System.out.println("!" +map.get(group).size());
}
return map;
}
第一张println打印44.这就是说不是空的。但是,第二个println引发了null异常。
知道我做错了吗?
AS指出了公认的解决方案。问题出在我的compareTo实现中。
我曾经有过:
public int compareTo(AccountGroupBean o) {
return (number > o.getNumber()) ? 1 : -1;
}
添加0回报解决了问题:
public int compareTo(AccountGroupBean o) {
if(number == o.getNumber()) {
return 0;
}
return (number > o.getNumber()) ? 1 : -1;
}
答案 0 :(得分:2)
我看起来AccountGroupBean
没有以正确的方式实现Comparable
,请尝试打印group.compareTo(group)
以检查它是否打印0
。
答案 1 :(得分:1)
这很可能是AccountGroupBean类如何实现equals和hashcode的问题。实现equals和hashcode有一些规则,你应该确保你的代码符合。 equals方法的一些规则包括。
x.equals(x)
的y.equals(x)
为真时,非空值x.equals(y)
的x.equals(y)
为真且y.equals(z)
为真,则{null}值为真,则x.equals(z)
也必须为真