.reversed()无法在blueJ中编译

时间:2019-05-11 14:07:17

标签: java

我有一种方法可以对我制作的类的表进行排序。 除方法末尾的“ .reserved”(阻止其编译)外,其他所有内容都很好。我该怎么做才能编译方法?

    public void sortTable(String division) {
    List<Team> teamsForDivision = teams.get(division);
    if (teamsForDivision == null) {
        return;
    }

    Collections.sort(teamsForDivision, new Comparator<Team>() {
        @Override
        public int compare(Team o1, Team o2) {
            return o1.getPoints() - o2.getPoints();
        }
    }.reversed());
}

1 个答案:

答案 0 :(得分:1)

没有BlueJ报告的错误,则无法正确回答,但是:

   Collections.sort(teamsForDivision, new Comparator<Team>() {
        @Override
        public int compare(Team o1, Team o2) {
            return o1.getPoints() - o2.getPoints();
        }
    }.reversed());

如果编译器说存在语法错误,则可能需要某些令牌(例如“ 意外令牌{,Expected ” ”),请尝试添加括号或创建变量:

使用括号:

   Collections.sort(teamsForDivision, (new Comparator<Team>() {
        @Override
        public int compare(Team o1, Team o2) {
            return o1.getPoints() - o2.getPoints();
        }
    }).reversed());

使用变量:

   Comparator<Team> pointComparator = new Comparator<Team>() {
        @Override
        public int compare(Team o1, Team o2) {
            return o1.getPoints() - o2.getPoints();
        }
   };
   Collections.sort(teamsForDivision, pointComparator.reversed());

如果编译器警告您方法reversed不存在(这很可能在此处出现),则意味着编译器使用Java 8以下的版本(该方法已在Java 8中添加),但相反是不难:

Comparator<Team> pointComparator = new Comparator<Team>() {
  @Override
  public int compare(Team o1, Team o2) {
    return -(o1.getPoints() - o2.getPoints());
  }
};

如果可能,应改为使用Integer::compare

Comparator<Team> pointComparator = new Comparator<Team>() {
  @Override
  public int compare(Team o1, Team o2) {
    return -Integer.compare(o1.getPoints(), o2.getPoints());
  }
}

最后,您也可以使用lambda(如果支持Java 8):

Comparator<Team> c = Comparator.comparingInt(Team::getPoints).reversed();

或者,您可能希望升级BlueJ的版本:site表示4.1.2 ++版本支持Java 8:

  

我可以使用Java 9、10、11 ...运行BlueJ吗?

     

当前版本的BlueJ(4.1.2)需要Java8。大多数用户(在   Windows或Mac平台)应使用相同的JDK运行BlueJ   捆绑在一起–其他版本尚未经过测试。

     

BlueJ的未来版本将与(并要求)更高版本的Java一起使用   版。目前,我们希望BlueJ 4.2.0能够正常工作   使用Java 11。