我对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[]>)
答案 0 :(得分:3)
方法Collections.sort
由T
参数化,这意味着条件<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)));
}