如何用比较器实现Treemap?

aks*_*tia 0 java treemap comparator

我在本课题中遇到的错误已经解决,并在下面的答案部分写下.

问题是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);
Run Code Online (Sandbox Code Playgroud)

我不明白Treemap的实现错误的原因.有谁能解释一下这里发生了什么?

Joh*_*ica 7

compare()需要处理三种情况:小于,大于和等于.你需要0在他们平等的时候回来.

if (o1.roll == o2.roll) {
    return 0;
}
else if (o1.roll < o2.roll) {
    return -1;
}
else {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

Integer.compare(int x, int y) 可以为你做所有这些:

public int compare(Student o1, Student o2) {
    return Integer.compare(o1.roll, o2.roll);
}
Run Code Online (Sandbox Code Playgroud)

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

Map<Integer, Student> map = new TreeMap<>(Comparator.comparingInt(s -> s.roll));
Run Code Online (Sandbox Code Playgroud)