簡體   English   中英

使用比較器將列表添加到樹集

[英]Adding a list to a tree set using a comparator

因此,我必須創建一個分數高於給定分數的播放器對象的TreeSet。 我不允許使用任何形式的for循環。 我已經編寫了一個比較器並創建了Need對象的列表,但是當我將列表添加到樹集時,我得到一個Player不能轉換為java.lang.Comparable錯誤。

注意:一切正常,直到我嘗試將其添加到樹集中,如果我將樹集取出並只打印highPlayers,它就會給我我想要的列表。

為什么不讓我將此列表添加到樹集? 謝謝

public class TreeSetProblems2 {

    public static void main(String[] args) {
        List<Player> players = new ArrayList<>();

        Player p1 = new Player("Tom", 3);
        Player p2 = new Player("Bucky", 42);
        Player p3 = new Player("Tina", 23);
        Player p4 = new Player("Bob", 15);
        Player p5 = new Player("Shaun", 2);
        //Player p6 = new Player("Tommy", 3);

        players.add(p1);
        players.add(p2);
        players.add(p3);
        players.add(p4);
        players.add(p5);

        System.out.print(highRollers(players, 9));
    }

    public static TreeSet<Player> highRollers(List<Player> players, int score){
        TreeSet<Player> treeplayers = new TreeSet<>();
        Player dummy = new Player("Dummy", score);
        players.add(dummy);
        ScoreComparator sc = new ScoreComparator();
        Collections.sort(players, sc);
        int index = players.indexOf(dummy);
        List<Player> highPlayers = players.subList(index+1, players.size());
        treeplayers.addAll(highPlayers);
        return treeplayers;
    }


} 

我發現了自己的解決方案:

public static TreeSet<Player> highRollers(List<Player> players, int score) {
    TreeSet<Player> treeplayers = new TreeSet<>(new ScoreComparator());
    treeplayers.addAll(players);

    while(treeplayers.first().getScore() < score) {
        treeplayers.pollFirst();
    }

    return treeplayers;
}

甚至更簡單:

public static TreeSet<Player> highRollers(List<Player> players, int score) {
    TreeSet<Player> treeplayers = new TreeSet<>(new ScoreComparator());
    TreeSet<Player> highRollers = new TreeSet<>(new ScoreComparator());

    treeplayers.addAll(players);
    highRollers.addAll(treeplayers.tailSet(new Player("Dummy", score)));

    return highRollers;
}

關鍵點似乎是TreeSet只能包含實現Comparable接口的類的元素。 您必須更改“ Player”類才能這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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