【问题标题】:Sorting an ArrayList<String[]> in alphabetical order按字母顺序对 ArrayList<String[]> 进行排序
【发布时间】:2019-02-03 11:17:03
【问题描述】:

我对 java 比较陌生,想知道如何按字母顺序对 String[] 类型的 ArrayList 进行排序。在这种情况下,我的 ArrayList 名称是 temp。基本上 String[] 将包含 3 个元素:String a、String b 和 String 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[]>)

 

【问题讨论】:

  • 我无法解析——数组列表的字母顺序是什么?
  • 通讯录为什么返回字符串数组?
  • 您如何确定一个String[] 是否大于/小于/等于另一个String[]?第一个元素?所有元素连接在一起?请注意,这不会编译,因为Collections.sort 要求List 的元素类型为Comparable,而String[] 不是;您需要使用Collections.sort(List,Comparator) 并使用适当的Comparator
  • 如果您使用的是 Java8,这可能会有所帮助list.sort(String::compareToIgnoreCase);
  • 如果它还没有在您的脑海中“点击”,您正在要求程序对字符串数组列表进行排序。不是字符串列表。

标签: java sorting arraylist


【解决方案1】:

Collections.sort 方法由T 参数化,这意味着应该满足条件&lt;T extends Comparable&lt;? super T&gt;&gt;String[] 不符合要求,因为它没有扩展 Comparable

Collections.&lt;String[]&gt;sort(new ArrayList&lt;&gt;());
Collections.&lt;String&gt;sort(new ArrayList&lt;&gt;());

当我们想要对不可比较值进行排序时,我们会使用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) -&gt; 0(它只是将所有元素视为相同)。

【讨论】:

  • 对于 OP:请注意,您需要定义自己的自定义 Comparator&lt;String[]&gt;,这决定了您在排序输出中对 String[] 的顺序。给出的示例实际上并不“工作”,它们只是编译。 ;)
  • 好的,非常有帮助,谢谢,我做了类似的事情Collections.sort(toBeDisplayed, (String[] a1 , String[] a2) -&gt; a1[0].compareTo(a2[0]) );,但它仍然显示错误,整个句子都是灰色的,有什么想法吗?
  • @RajdeepSinghHundal 您编写的比较器可能会替换为表达式Comparator.comparing((String[] a) -&gt; a[0])。这就是该行显示为灰色的原因。
  • @RajdeepSinghHundal 后者是您的增强版,例如它正确地涵盖了a1[0] == null || a2[0] == null 的情况。如果a1[0]null,您的版本会抛出异常
  • @RajdeepSinghHundal,但您仍然可以使用初始版本,即使它不太可靠
【解决方案2】:

这里的问题是您没有尝试对字符串列表进行排序(例如“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)));
}

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 2017-05-22
    • 2019-08-02
    • 2013-10-28
    • 2011-01-30
    • 2011-08-29
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    相关资源
    最近更新 更多