Comparator - int无法解除引用

时间:2014-08-05 18:22:58

标签: java

所以我在这里看到一个例子,如何使用Comparator接口对ArrayList进行排序,所以我试了一下。使用Strings它完美地工作,但是我想要将一个变量排序为Integer,它将无法编译,说“int不能被解除引用”。

我该怎么做才能使这个有用,并允许我按分数变量对ArrayList进行排序?

这是我的代码:

public class ScoreComparator implements Comparator<Review> {

@Override
public int compare(Review o1, Review o2)
{
   return o1.getScore().compareTo(o2.getScore());
}
}

感谢您的帮助!

3 个答案:

答案 0 :(得分:7)

你不能在int上调用方法;没有compareTo方法可以调用。这将是盒装Integer类型,但拳击会有点过分。

如果您使用的是Java 7+,则应编写

return Integer.compare(o1.getScore(), o2.getScore());

...否则你或多或少需要写

if (o1.getScore() < o2.getScore()) {
   return -1;
} else if (o1.getScore() > o2.getScore()) {
   return 1;
} else {
   return 0;
}

答案 1 :(得分:1)

Fyi,虽然这并没有回答你关于int解除引用错误的具体问题,但在Java 8中你根本不需要专用的比较器类。你可以简单地写一下:

yourList.sort((r1, r2) -> Integer.compare(r1.getScore(), r2.getScore()));

yourList.sort(Comparator.comparingInt(Review::getScore));

两者都是更好的方法。

答案 2 :(得分:-2)

试试这个:

public class ScoreComparator implements Comparator<Review> {

    @Override
    public int compare(Review o1, Review o2)
    {
         return (o1.getScore()<o2.getScore() ? -1 : (o1.getScore()==o2.getScore() ? 0 : 1));
    }
}