对象作为Java8中树映射中的键
CompareObj是java中的一个类,它由三个属性组成对象作为Java8中树映射中的键,java,java-8,treemap,Java,Java 8,Treemap,CompareObj是java中的一个类,它由三个属性组成String rowKey、整数hitCount、Long-recenty public CompareObj(String string, Integer i) { this.rowKey = string; this.hitCount = i%10; this.recency= (Long) i*1000; } 现在我创建了一个树形图 Comparator<CompareObj> comp1
String rowKey、整数hitCount、Long-recenty
public CompareObj(String string, Integer i) {
this.rowKey = string;
this.hitCount = i%10;
this.recency= (Long) i*1000;
}
现在我创建了一个树形图
Comparator<CompareObj> comp1 = (e1,e2) -> e1.getHitCount().compareTo(e2.getHitCount());
Comparator<CompareObj> comp2 = (e1,e2) -> e2.getRecency().compareTo(e1.getRecency());
Comparator<CompareObj> result = comp1.thenComparing(comp2);
TreeMap<CompareObj, CompareObj> tM = new TreeMap<CompareObj, CompareObj>(result);
for(int i=0;i<=1000;i++)
{
CompareObj cO = new CompareObj("A"+i, i);
tM.put(cO,cO);
}
for(int i=0;i<=1000;i++)
{
CompareObj cO = new CompareObj("A"+i, i);
CompareObj values = tM.get(cO);
System.out.println(values.getRowKey()); // Line 28: get Null Pointer Exception
}
在这里,当我尝试从treemap返回值时,我在前面提到的行中得到Null指针异常。如何解决这个问题
如果我想实现Comaprable接口的comapareTo(),如果存在多个排序条件,我应该如何实现。首先要了解的是
NullPointerException
。如果你在这一行得到了例外
System.out.println(values.getRowKey());
然后System.out
或values
为null
。因为我们可以排除System.out
为null
,所以它是values
变量,它包含get
的结果,如果查找失败,它可以是null
由于您正在使用自定义的比较器
初始化树映射
,因此比较器
决定相等性。您的比较器
基于必须匹配的属性getHitCount()
和getRecenty()
,这意味着当查找失败时,映射不包含与这两个方法报告的值相同的对象
您可以使用相同的值构造对象,但不使用这些getter的代码。一定有不一致的地方。因为,您发布的代码不能是获取异常时运行的代码,因此我们无法进一步帮助您(除非您发布您运行的真实代码)。您的比较器可以更简单地实现为
比较(CompareObj::getHitCount)。然后比较(反向(比较(CompareObj::GetRecenty)))
如果最近期
被声明为长期
,此。最近期=i*1000代码>不应编译。请在编译和运行代码时粘贴代码。一旦recenty
行被修复,代码就会正常运行:@Louis Wasserman:比较(CompareObj::getHitCount)。然后比较(CompareObj::getrecenty,reversed())
@ManuJoy,转换为Long
也不会编译。您应该强制转换为long
或使用long.valueOf(i*1000)
。同样,由于您的问题是关于运行时异常的,请完全按照编译和运行代码的方式粘贴代码。
System.out.println(values.getRowKey());