【问题标题】:Sort Arraylist ignore digits do it alphabetically排序 Arraylist 忽略数字按字母顺序执行
【发布时间】:2015-10-19 02:00:36
【问题描述】:

所以我得到了一个简单的数组列表,我想按字母顺序排序,这部分我记下来了。没问题,问题是,名单上的名字前面有一个身份证号码。我需要根据字母对其进行排序。任何帮助表示赞赏,请参见下文。

    student.add("01, Pentecoast");
    student.add("02, Walker");
    student.add("03, Smith");
    student.add("04, Gonzalez");
    student.add("05, Kylekorn");
    student.add("06, Queen");
    student.add("07, Divan");
    student.add("08, Homero");
    student.add("09, Flanders");
    student.add("10, Simpsons");

我的排序方式是:

    Collections.sort(students, String.CASE_INSENSITIVE_ORDER);

但他们的数字正在路上。

【问题讨论】:

  • 您可以创建一个自定义的Comparator,它将拆分您的字符串并根据第二个令牌进行比较。
  • 我不知道该怎么做。
  • 更好的方法是创建自己的Student 类,而不是使用逗号分隔的字符串来表示学生。然后,您可以选择在您的Student 中实现Comparable(根据名称进行比较)或使用Comparator

标签: java sorting arraylist collections


【解决方案1】:

我想你想要一个自定义的Comparator,但让我们定义和初始化你的List。类似的,

List<String> student = new ArrayList<>();
student.add("01, Pentecoast");
student.add("02, Walker");
student.add("03, Smith");
student.add("04, Gonzalez");
student.add("05, Kylekorn");
student.add("06, Queen");
student.add("07, Divan");
student.add("08, Homero");
student.add("09, Flanders");
student.add("10, Simpsons");

然后处理nullsplit。比较数字后面的文字。类似的,

Collections.sort(student, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        if (o1 == null) {
            return o2 == null ? 0 : -1;
        } else if (o2 == null) {
            return 1;
        }
        String[] o1Arr = o1.split(", ");
        String[] o2Arr = o2.split(", ");
        return o1Arr[1].compareTo(o2Arr[1]);
    }
});
System.out.println(student);

输出按名称排序(我明白,为这篇文章格式化)

[07, Divan, 09, Flanders, 04, Gonzalez, 08, Homero, 
 05, Kylekorn, 01, Pentecoast, 06, Queen, 10, Simpsons, 
 03, Smith, 02, Walker]

【讨论】:

  • 完美,感谢您抽出时间来实际解释情况。最后它有很大帮助,我不确定我是否可以这样拆分字符串。在数组列表上。谢谢。
【解决方案2】:

由于您只想比较没有 id 值的名称,因此您可以在自定义比较器中将您想要的学生姓名部分作为子字符串:

Comparator<String> comparator = new Comparator<String>(){

    @Override
    public int compare(final String sid1, final String sid2){
        return sid1.substring(4).compareTo(sid2.substring(4));
    }
};

你可以这样排序:

Arrays.sort(students, comparator);

【讨论】:

  • 这对理解需要做什么很有帮助。
【解决方案3】:

您应该定义自己的 Comparator 来比较第一个非数字字符并进行相应的排序。

Collections.sort(students, new Comparator<String>() {
    @Override
    public int compare(String item1, String item2) {
        return item1.split(", ")[1].compareTo(item2.split(", ")[1]);
    }
});

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2011-04-06
    • 2019-08-02
    相关资源
    最近更新 更多