Comparator - int无法解除引用

CSR*_*cal 1 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());
}
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

Lou*_*man 7

你不能在ints 上调用方法; 没有compareTo办法打电话.这将是盒装Integer类型,但拳击将是矫枉过正.

如果你使用Java 7+,你应该写

return Integer.compare(o1.getScore(), o2.getScore());
Run Code Online (Sandbox Code Playgroud)

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

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

  • 或者如果`getScore()`返回一个`int`,你可以'返回o1.getScore() - o2.getScore();` (3认同)
  • @Jashaszun小心:这通常有效,但对于较大的值是不安全的,因为减法会溢出. (3认同)