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

时间:2018-08-28 18:38:10

标签: java sorting arraylist

我对Java还是比较陌生,想知道如何按字母顺序对String []类型的ArrayList进行排序。在这种情况下,我的ArrayList名称是temp。基本上,String []将包含3个元素:字符串a,字符串b和字符串c。我想相对于字符串a对数组列表进行排序。我正在使用Java 10。

我已经尝试过了,但是没有用

ArrayList<String[]> temp = somefunction();
Collections.sort(temp);

这是显示的错误:

sort(java.util.List<T>) in Collections cannot be applied 
      to(java.util.ArrayList<java.lang.String[]>)

2 个答案:

答案 0 :(得分:3)

方法Collections.sortT参数化,这意味着条件<T extends Comparable<? super T>>应该得到满足。 String[]不符合要求,因为它没有扩展Comparable

Collections.<String[]>sort(new ArrayList<>());
Collections.<String>sort(new ArrayList<>());

当我们要对不可比拟的值进行排序时,我们利用Collections.sort(List, Comparator)

Collections.sort(new ArrayList<>(), (String[] a1, String[] a2) -> 0);
Collections.<String[]>sort(new ArrayList<>(), (a1, a2) -> 0);

当然,您应该将模拟比较器(String[] a1, String[] a2) -> 0(将所有元素都视为相同)替换为真实的比较器。

答案 1 :(得分:1)

这里的问题是您没有尝试对字符串列表进行排序(例如,“ cat”小于“ dog”)。您正在尝试对字符串数组列表进行排序。

array [“ cat”,“ dog”]小于array [“ dog”,“ cat”]吗?默认情况下,该逻辑不存在,您必须对其进行定义。

示例代码

这是一个示例(严重地只是使用第一个元素):

public static void main(String[] args) {
    List<String[]> s = new ArrayList<>();
    s.add(new String[] {"dog", "cat"});
    s.add(new String[] {"cat", "dog"});
    s.sort((o1, o2) -> {
        //bad example, should check error conditions and compare all elements.
        return o1[0].compareTo(o2[0]);
    });

    //Outputs [cat, dog] then [dog, cat].
    s.forEach(x -> System.out.println(Arrays.toString(x)));
}