[英]Errors with Comparator implementation in Java
這是我對比較器的實現。
class Checker implements Comparator<Player> {
private static final Comparator<Player> asc = Comparator
.comparingInt(Player::score).thenComparing(Player::name);
private static final Comparator<Player> desc = asc.reversed();
private final boolean descending;
public int compare(Player player1, Player player2) {
Comparator<Player> sorter = descending ? desc : asc;
return sorter.compare(player1, player2);
}
}
這是我的 Player 對象。
class Player
{
String name;
int score;
}
這就是比較器被調用的方式。 提供了調用代碼,我無法修改它。
Checker check = new Checker();
Arrays.sort(Player,check.desc);
這是我得到的匯編。 主類是名稱解決方案。 第 6 行是首先調用 Player::score 的代碼行。
Solution.java:6: error: ')' expected
.comparingInt(Player::score).thenComparing(Player::name);
^
Solution.java:6: error: illegal start of type
.comparingInt(Player::score).thenComparing(Player::name);
^
Solution.java:6: error: ';' expected
.comparingInt(Player::score).thenComparing(Player::name);
^
Solution.java:6: error: invalid method declaration; return type required
.comparingInt(Player::score).thenComparing(Player::name);
^
Solution.java:6: error: <identifier> expected
.comparingInt(Player::score).thenComparing(Player::name);
^
Solution.java:6: error: ';' expected
.comparingInt(Player::score).thenComparing(Player::name);
^
Solution.java:6: error: <identifier> expected
.comparingInt(Player::score).thenComparing(Player::name);
嘗試像這樣更改 Checker 類:
public class Checker {
public static final Comparator<Player> asc = new Comparator<Player>() {
public int compare(Player o1, Player o2) {
if(o1.score != o2.score)
return o1.score - o2.score;
else
return o1.name.compareTo(o2.name);
}
};
public static final Comparator<Player> desc = new Comparator<Player>() {
public int compare(Player o1, Player o2) {
if(o1.score != o2.score)
return o2.score - o1.score;
else
return o2.name.compareTo(o1.name);
}
};
}
您不能使用方法句柄語法來訪問對象的屬性。 使用 lambdas 代替:
private static final Comparator<Player> asc = Comparator
.comparingInt((Player p) -> p.score).thenComparing((Player p) -> p.name);
對於 Java 1.7
class Compare implements Comparator<Player>{
boolean descending;
@Override
public int compare(Player o1, Player o2) {
if(o1.score < o2.score)
return -1;
else if(o1.score > o2.score)
return 1;
else
return o1.name.compareTo(o2.name);
}
}
class Checker{
Comparator<Player> asc = new Compare();
Comparator<Player> desc = Collections.reverseOrder(asc);
}
以下是您的主要方法:
Player[] players = new Player[3];
Checker check = new Checker();
Arrays.sort(players,check.desc);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.