Android Collections.compare() 更改标准

use*_*889 2 java android arraylist

我正在为android开发一款游戏,我将分数保存在“100&playername1,93&playername1,1950&playername2”等形式的文本文件中。即它是完全无序的。

现在我正在尝试制作一个高分界面,我知道要对分数进行排序,我应该使用String.split(",")后面的方法String.split("&")[0]来获取分数并将它们放入 ArrayList 中,然后调用Collections.compare(list). 然而,一旦我这样做了,我就无法找到与乐谱相关的名称。

有人可以帮我解决这个问题吗?我尝试过在括号之间对整个字符串进行排序(将短语“100&playername1”放入数组中,但这无法根据数量级进行排序。我的意思是它会将 100 放在 1950 之前。

谢谢你的帮助!

ebo*_*oix 5

创建一个名为UsernameScorePair. 将分数和用户名分开后,将它们成对放置(每个“分数和用户名”一个)。

例如,这个类定义可以工作:

公共类用户名分数对{

    private String name;
    private int score;

    public UsernameScorePair(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getScore() {
        return score;
    }

}
Run Code Online (Sandbox Code Playgroud)

创建一个名为UsernameScorePairComparatorImplements 的类Comparator

在该compare(Object o1, Object o2)方法中,将对象转换为 UsernameScorePairs 并比较分数。例如:

public class UsernameScorePairComparator {

    public UsernameScorePairComparator() {
    }

    public int compare(Object o1, Object o2) {
        UsernameScorePair usp1 = (UsernameScorePair)o1;
        UsernameScorePair usp2 = (UsernameScorePair)o2;

        return usp1.getScore() - usp2.getScore();
    }
}
Run Code Online (Sandbox Code Playgroud)

Collections.sort然后像这样使用:

Collections.sort(listofpairs, new UsernameScorePairComparator())

我不记得它是按升序还是降序排序。如果是升序,则return usp1.getScore() - usp2.getScore();改为return usp2.getScore() - usp1.getScore();

编辑

AComparator基本上比较两个对象。在其compareTo方法中,如果第一个小于第二个,则返回负值;如果第一个大于第二个,则返回正值;如果两者相等,则返回零。

您可以实现Comparator(就像我刚才所做的那样)来满足您的需求。然后,使用它Comparator,您可以使用标准 API 方法,例如Collections.sort().

我希望这能起作用!