java - 如何使用比较器实现Treemap?

标签 java comparator treemap

我在这个问题中遇到的错误已经解决,并写在下面的答案部分。

问题是 TreeMap 的以下定义引发编译器错误,我想知道原因。

Comparator<Student> comparator=new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                // TODO Auto-generated method stub
                if(o1.roll<=o2.roll)
                    return -1;
                else return 1;
            }
        };
        TreeMap<Integer, Student> map=new TreeMap<>(comparator);

我不明白 Treemap 的这种实现是错误的原因。谁能帮我解释一下这里发生了什么吗?

最佳答案

compare() 需要处理三种情况:小于、大于和等于。当它们相等时,您需要返回 0

if (o1.roll == o2.roll) {
    return 0;
}
else if (o1.roll < o2.roll) {
    return -1;
}
else {
    return 1;
}

Integer.compare(int x, int y)可以为您完成这一切:

public int compare(Student o1, Student o2) {
    return Integer.compare(o1.roll, o2.roll);
}

在 Java 8 中,您可以在一行中创建整个比较器:

Map<Integer, Student> map = new TreeMap<>(Comparator.comparingInt(s -> s.roll));

关于java - 如何使用比较器实现Treemap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128689/

相关文章:

java - 如何按值对 TreeMap 中的键进行排名?

java - 使用java中的树形图查找字符串中字符的频率时出现错误

java - 在 Java 中从旧 map 创建新 map 的优雅方式,同时保持元素的排序相同

java - Thymeleaf 迭代嵌套列表来为高尔夫应用程序创建表 <th> 标题和 <td> 文本

java - 如何从 RSA 1024 位加密中获得较短的输出(密文)结果?

java - 通过java中的两个属性键将(最小)对象保留在集合中

java - 比较器java中计数器变量的奇怪输出

java - java 8中的接口(interface)和抽象有什么区别?

java - 难以理解神经网络中的反向传播算法

java - 填充复杂的 Map 并访问其值