簡體   English   中英

Java 中比較器實現的錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM