如何对包含字符串数组的arraylist进行排序?

时间:2016-08-20 22:07:24

标签: java sorting arraylist

List<String[]> allWordList = new ArrayList<>();

我想按字母顺序基于字符串数组中的第一个元素对“allWordList”列表进行排序。

我有一个包含大小为2的字符串数组的列表。所以基本上我想通过比较字符串数组的第一个元素来排序这个列表。

Collection.sort();

不起作用,因为它用于排序......

List<String>

而不是

List<String[]>

要清楚我不想对单个string []元素进行排序。我想根据字符串数组的第一个元素对整个列表进行排序。

5 个答案:

答案 0 :(得分:5)

一个简单的自定义比较器应该可以解决问题。

唯一棘手的事情是确保你没有索引到一个空数组:

Collections.sort(allWordList, new Comparator<String[]>() {
    public int compare(String[] o1, String[] o2) {
        if (o1.length == 0) {
            return o2.length == 0 ? 0 : -1;
        }
        if (o2.length == 0) {
            return 1;
        }
        return o2[0].compareTo(o1[0]);
    }
});

答案 1 :(得分:2)

您可以提供自己的比较器,例如作为lambda表达式:

allWordList.sort((o1, o2) -> o1[0].compareTo(o2[0]));

答案 2 :(得分:0)

我选择了@dasblinkenlight的答案,我并不认为比较数组长度是正确的行为。

private void sort() {
    List<String[]> allWordList = new ArrayList<String[]>();
    // fill the list...
    Collections.sort(allWordList, new FirstElementComparator());
    // and so on...
}

private static class FirstElementComparator implements Comparator<String[]>
{
    @Override
    public int compare(String[] sa1, String[] sa2) {
        String str1 = sa1[0];
        String str2 = sa2[0];

        int result = 0;
        if (str1 == null) {
            result = (str2 == null) ? 0 : -1;
        }
        else {
            result = str1.compareTo(str2);
        }
        return result;
    }
}

答案 3 :(得分:0)

您无需编写自己的Comparator

$ cat /usr/local/etc/dnsmasq.conf
address=/.10.2.2.2.xip.io/10.2.2.2
address=/.ain1/10.2.2.2
address=/.10.1.2.2.xip.io/10.1.2.2
address=/.cdk/10.1.2.2

$ls /etc/resolver/
ain1      ain1-xip  cdk       cdk-xip   ddns

$cat /etc/resolver/cdk-xip
domain 10.1.2.2.xip.io
nameserver 127.0.0.1

如果排序区分大小写,您可以省略String.CASE_INSENSITIVE_ORDER

或者如果您需要依赖于区域设置的排序,请查看Collator

答案 4 :(得分:-3)

检查:

Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return s1.compareToIgnoreCase(s2);
        }
    });

来自here

的来源

选项2:

Collections.sort(teamsName.subList(1, teamsName.size()));

来自here

的来源