我有一种方法可以对我制作的类的表进行排序。 除方法末尾的“ .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());
}
答案 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。