当前位置: 首页 > 知识库问答 >
问题:

比较器 - int 不能取消引用 [重复]

步博厚
2023-03-14

我在这里看到了一个如何使用比较器界面对 ArrayList 进行排序的示例,所以我尝试了一下。对于Strsing,它可以完美地工作,但是对于一个我想排序为整数的变量,它不会编译,说“int不能被取消引用”。

我能做什么才能使它工作并允许我按分数变量对ArrayList进行排序?

这是我的代码:

public class ScoreComparator implements Comparator<Review> {
    
    @Override
    public int compare(Review o1, Review o2)
    {
       return o1.getScore().compareTo(o2.getScore());
    }
}

共有3个答案

濮阳振海
2023-03-14

试试这个:

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));
    }
}
施飞驰
2023-03-14

Fyi,虽然这没有回答您关于int解引用错误的具体问题,但在Java8中,您根本不需要专用的comparator类。你可以简单地写:

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

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

这两种方式都更好。

周玺
2023-03-14

您不能在int上调用方法;没有compareTo方法可供调用。那将是装箱的整数类型,但装箱会大材小用。

如果你在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;
}
 类似资料:
  • 我正在做一些任务工作,我遇到了一个问题。 我收到了这个示例代码: 然而,当我尝试这样做时,会发生以下情况: 有什么想法吗?

  • 问题内容: 因此,我在这里看到了一个示例,该示例如何使用Comparator接口对ArrayList进行排序,因此我进行了尝试。使用Strings可以很好地工作,但是我要排序的一个变量是Integer,它将无法编译,并说“不能取消引用int”。 我该怎么做才能使它起作用,并允许我按score变量对ArrayList进行排序? 这是我的代码: 谢谢您的帮助! 问题答案: 您不能在上调用方法;没有可以

  • 问题内容: 我开始使用Java(我正在学习微编辑),但在以下课程中收到此错误:“无法取消引用”: 我在这里做错了什么?好吧,我来自PHP和ECMAScripts,能够以这种方式传递函数自变量,因此我真的不理解该错误。 问题答案: 在中是你已经通过色彩值,而不是你的参考。因此,错误是当您尝试在上调用方法而无法执行时。

  • 问题内容: 在下面的代码中,我有int无法取消引用错误,这里//我有错误。我很困惑,因为变量b用于稍后在行中引用empl数组中的点,而没有显示为错误。那么,如何解决此问题,为什么会产生错误?我将不胜感激任何帮助。示例代码也很棒,因为这似乎是我学得最好的方法。谢谢! 编辑:欢迎按员工编号对数组进行排序的任何其他建议。 问题答案: 显然会传回。 是原始类型,而不是对象。 因此,您不能调用类似的方法。

  • 问题内容: 问题是。 问题答案: 是某些Java编译器在您尝试在原语上调用方法时出现的错误。在我看来,这会有所帮助,但是我知道什么。 从你的代码,看来你认为你可以复制的文本表示将通过执行hours.setText(hoursminfield); 这有一些错误:1)hours是一个原始类型,没有可以调用的方法。这就是给您您所询问的错误的原因。2)您没有说hoursminfield是什么类型,也许您还

  • 我对Java相当陌生,我使用的是BlueJ。当我试图编译时,我总是得到这个“Int不能被解引用”的错误,我不知道是什么问题。这个错误特别发生在我的if语句的底部,它说“equals”是一个错误,“int不能被解引用。”希望得到一些帮助,因为我不知道该怎么办。提前感谢!