Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:按字符串中包含的数字对字符串列表进行排序(降序)_Java_Sorting_Substring - Fatal编程技术网

Java:按字符串中包含的数字对字符串列表进行排序(降序)

Java:按字符串中包含的数字对字符串列表进行排序(降序),java,sorting,substring,Java,Sorting,Substring,我有一个.txt文件,里面有人们的名字和他们在游戏中获得的分数,例如 2 John 6 Matt etc. 我试着按照得分最高的人(他们名字旁边的数字)的顺序来组织他们。我可以使用子字符串来获取整数,然后再对集合进行排序,但我不确定如何将其与名称联系起来 如果有人有任何聪明的想法,请帮助!我现在有它,所以所有的分数/名字都被读取到一个数组列表中,比如:{2 John,3 Matt}您可以简单地实现一个自定义的比较器并在第一个空格上拆分(将拆分限制为2)。我还假设领带应该按词汇(字母)顺序排列。

我有一个.txt文件,里面有人们的名字和他们在游戏中获得的分数,例如

2 John
6 Matt
etc.
我试着按照得分最高的人(他们名字旁边的数字)的顺序来组织他们。我可以使用子字符串来获取整数,然后再对集合进行排序,但我不确定如何将其与名称联系起来


如果有人有任何聪明的想法,请帮助!我现在有它,所以所有的分数/名字都被读取到一个数组列表中,比如:
{2 John,3 Matt}

您可以简单地实现一个自定义的
比较器
并在第一个空格上拆分(将拆分限制为
2
)。我还假设领带应该按词汇(字母)顺序排列。像


您可以实现一个类
PlayerScore
,该类“包含”分数和球员姓名,并将该类的实例放入
ArrayList
。然而,在对自定义类进行排序时,您可能会遇到另一个问题,但请随意提出另一个问题。我知道这可能有些过分,但我会将每个名称表示为一个对象,即“2 john”将是一个person对象,用int表示数字,用字符串名称表示名称。C#structs最适合于此,但由于Java没有structs,在如此小的数据上实现这一点显然是过火了,但它可以工作。然后,您可以将所有对象插入ArrayList,并对最高评分者进行线性搜索,然后将该person对象存储到另一个列表中,但不要忘记从包含无序数据的ArrayList中删除最高评分者。您可以发布您尝试过的代码吗?今天下午稍后将尝试此操作,看起来很有希望,谢谢!
List<String> al = new ArrayList<>(Arrays.asList("2 John", //
        "3 Matt", "3 Adam Smith"));
al.sort(new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        String[] a = o1.split("\\s+", 2); // <-- split on white space, limit 2.
        String[] b = o2.split("\\s+", 2);
        int r = Integer.compare(Integer.parseInt(a[0]), //
                Integer.parseInt(b[0]));
        if (r != 0) {
            return -r;
        }
        return a[1].compareTo(b[1]);
    }
});
System.out.println(al);
[3 Adam Smith, 3 Matt, 2 John]