【问题标题】:Sort List<String[]> based on first element each [duplicate]根据每个元素的第一个元素对 List<String[]> 进行排序 [重复]
【发布时间】:2021-09-15 22:26:08
【问题描述】:

我有一个字符串数组的链表。

List<String[]> list = new LinkedList<>();

此列表的每个元素都包含以下形式的元素:

["word1", "example1", "2"]

如何按每个数组字典序中的第一个字符串元素对列表进行排序?

【问题讨论】:

  • 不要使用LinkedList。使用ArrayList
  • 虽然 LinkedList 非常擅长在数组中间添加和删除元素,但它的随机访问(根据排序的需要)却没有那么好。通常首选 ArrayList,而这可能取决于您还需要对这个数组做什么。

标签: java arrays sorting collections


【解决方案1】:

您需要提供一个Comparator 来比较数组的第一个值。

list.sort(Comparator.comparing(a -> a[0]));

测试

List<String[]> list = new LinkedList<>();
list.add(new String[] { "word1", "example1", "2" });
list.add(new String[] { "ahead", "invention", "3" });
list.add(new String[] { "sip", "nerve", "4" });

list.sort(Comparator.comparing(a -> a[0]));

list.forEach(a -> System.out.println(Arrays.toString(a)));

输出

[ahead, invention, 3]
[sip, nerve, 4]
[word1, example1, 2]

【讨论】:

    【解决方案2】:

    可以使用以下代码对列表进行排序。我想这应该足以满足您的目的。

    Collections.sort(list, new Comparator<String[]>() {
            @Override
            public int compare(String[] arr1, String[] arr2) {
                return arr1[0].compareTo(arr2[0]);
            }
        });
    

    如果您使用的是 Java 8 及更高版本,那么您可以通过以下代码行实现相同的效果。

    list.sort((arr1, arr2) -> arr1[0].compareTo(arr2[0]));
    

    【讨论】:

    • 有效。请注意,自 Java 8 以来,有一种更简洁和紧凑的方式来执行此操作,避免了所有匿名类的东西(请参阅其他答案)。
    • 如果您没有使用 Java 8,那么 List 没有 sort() 方法,因此两个示例都需要 Java 8。
    • 我更新了我的解决方案,使其更通用并包含 Java 8 的语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多