gpt4 book ai didi

java - 对象作为 java 8 中树状图中的键

转载 作者:行者123 更新时间:2023-11-30 03:23:02 26 4
gpt4 key购买 nike

CompareObj是java中的一个类,它由三个属性组成String rowKey、Integer hitCount、Long reency

public CompareObj(String string, Integer i) {


this.rowKey = string;
this.hitCount = i%10;
this.recency= (Long) i*1000;
}

现在我创建了一个treeMap

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
}

我还覆盖了 hashCode 和 Equals。我仍然遇到 nullponter 异常。

@Override
public int hashCode() {
return Objects.hash(getRowKey());
}
@Override
public boolean equals(Object obj) {
if(this==obj) return true;
if(!(obj instanceof CompareObj)) return false;
CompareObj compareObj = (CompareObj) obj;
return Objects.equals(this.getRowKey(), compareObj.getRowKey());
}

在这里,当我尝试从树形图中检索值时,我在提到的行中得到空指针异常。怎么解决这个问题

如果我想实现Comaprable接口(interface)的comapareTo(),如果有多个排序条件,我该如何实现。

最佳答案

首先要理解的是NullPointerException。如果您在确切的行上遇到异常

System.out.println(values.getRowKey());

那么 System.outvaluesnull。由于我们可以排除 System.outnull,因此它是 values 变量,其中包含 get 和如果查找失败,则可为 null

由于您使用自定义的 Comparator 初始化 TreeMap,因此 Comparator 会确定相等性。您的 Comparator 基于必须匹配的属性 getHitCount()getRecency(),这意味着当查找失败时, map 不会不包含与这两种方法报告的值相同的对象。

您表明您构造了具有相同值的对象,但没有这些 getter 的代码。一定有不一致的地方。如Misha pointed out ,您发布的代码不可能是您在遇到异常时运行的代码,因此我们无法进一步帮助您(除非您发布您运行的真实代码)。

关于java - 对象作为 java 8 中树状图中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30883232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com