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

标签 java java-8 treemap

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/

相关文章:

java - 数据库在第一次请求时每天抛出无法关闭资源异常

java - 无法使用 Homebrew 软件安装 java8

java - 将二维字符数组转换为一维字符串数组

java - 使用WebService客户端出现异常。(MyEclipse)

java - 文件读取器直到最后才读取所有数据

java - 如何按键对Java中的 map 进行排序,但如果键是(字符串+数字)的组合

java - 公历树形图

R Treemap - 如何添加多个标签

java - 从 600851475143 中找出最大的素数?

java - 使用 Java8 Stream API 合并两个 hashmap 列表