如何使用比较器对ArrayList <String>进行排序?

夸奇

大家好,我想为自己的比赛做一个计分板,因此我需要对它进行排序。我的输入是DATE; LEVEL; SCORE,如果它等于最高级别,并且如果等于日期,我想按最高分数对其进行排序。

我的ArrayList:

ArrayList<String> test = new ArrayList<>();
test.add("16.06.2018;1;10");
test.add("16.06.2018;1;2");
test.add("16.06.2018;1;5");
test.add("16.06.2018;1;1");
test.add("16.06.2018;1;3");
test.add("16.06.2018;2;3");
test.add("15.06.2018;1;3");
test.add("17.06.2018;1;3");

应该排序

[16.06.2018;1;10, 16.06.2018;1;5, 16.06.2018;2;3, 15.06.2018;1;3, 16.06.2018;1;3, 17.06.2018;1;3, 16.06.2018;1;2, 16.06.2018;1;1]; 

但我越来越

[16.06.2018;1;5, 16.06.2018;2;3, 15.06.2018;1;3, 16.06.2018;1;3, 17.06.2018;1;3, 16.06.2018;1;2, 16.06.2018;1;10, 16.06.2018;1;1]

我的代码:

Collections.sort(test, new Comparator<String>() {
    @Override
    public int compare(String A, String B) {
        String[] tmp = A.split(";");
        String[] tmp2 = B.split(";");
        if (tmp[2].equals(tmp2[2])) {
            if (tmp[1].equals(tmp2[1])) {
                return compareDate(tmp[0], tmp2[0]);
            } else {
                return tmp2[1].compareTo(tmp[1]);
            }
        } else {
            return tmp2[2].compareTo(tmp[2]);
        }
    }

    //compares 2 dates
    private int compareDate(String A, String B) {
        String[] tmp = A.split("\\.");
        String[] tmp2 = B.split("\\.");
        if (tmp[2].equals(tmp2[2])) {
            if (tmp[1].equals(tmp2[1])) {
                return tmp[0].compareTo(tmp2[0]);
            } else {
                return tmp[1].compareTo(tmp2[1]);
            }
        } else {
            return tmp[2].compareTo(tmp2[2]);
        }
    }
});
jspcal

您正在使用基于字符串的词法比较,该比较"5"视为大于"10"(因为该字符在Unicode表中排在'5'后面'1')。

相反,您应该使用数值比较。将字符串转换为整数,然后将其与Integer.compare或类似值进行比较

代替这个:

return tmp2[2].compareTo(tmp[2]);

你可以这样做:

return Integer.compare(
    Integer.parseInt(tmp2[2]),
    Integer.parseInt(tmp[2])
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用自定义比较器对ArrayList <String>进行排序

如何使用比较器对ArrayList进行排序?

使用按长度排序的比较器对名称的ArrayList进行排序

按字母顺序对ArrayList <String []>进行排序

如何对Map <String,List <class >>进行排序

如何对HashMap <String,Integer []>进行排序?

如何对string_agg()的结果进行排序

Swift:如何对Array <String>进行排序

如何按字符对 List<string> 进行排序?

如何根据特定索引范围对ArrayList <String>进行排序

使用 Java 对 Object.String 进行排序

使用linq对List <string>的数组进行排序

在 Kotlin 中使用 Int 和 String 对 ArrayList 进行排序

使用.compareTo()按字母顺序对ArrayList <String>进行排序

使用字符串长度对ArrayList <String>进行排序

使用Collections.sort和比较器对Arraylist进行排序

根据日期时间对ArrayList <HashMap <String,String >>进行排序

如何对Map <String,Map <String,int >> Dart进行排序

如何使用比较器将String转换为int并进行比较

对包含数字和字母的ArrayList <String>进行排序

如何对ArrayList进行排序?

如何使用Scala与我的比较器对DataFrame进行排序?

如何按值对Hashmap <String,Arraylist <String >>类型的Hashmap进行排序?

使用比较器对NSDictionaries的NSArray进行排序

如何排序ArrayList <ArrayList <String >>?

如何在 Kotlin 中创建 Hashmap<String,Int : String,String : String,String> 进行排序

如何对包含多个用'|〜'分隔的字段的List <String>进行排序

如何对向量<pair <string,pair <int,int >>>进行排序?

如何对 List<string> 中的 2 个不同规则进行排序