【问题标题】:How I can sort a list of list in java?如何在java中对列表列表进行排序?
【发布时间】:2020-12-23 06:24:21
【问题描述】:

我要对列表列表进行排序,例如:

List<List<String>> listOflists = new ArrayList();
List<String> b = {"x", "x"};
List<String> a = {"x"};
List<String> c = {"x", "x", "x"};

listOflists.add(a);
listOflists.add(b);
listOflists.add(c);

//Oder by size of the array
List<String> sortedList = listOflists.stream().sorted().collect(Collectors.toList());     

我预计 forEach 进程中的 listOflists:

洛普 1 x 洛普 2 x,x 洛普 3 x,x,x

【问题讨论】:

  • 只是好奇:字符串Lopp 1 来自哪里?我在您的代码中没有看到它。
  • 如果您的目标是根据列表大小对它们进行排序,那么您可以在 sorted 方法中通过提供类似 sorted(Comparator.comparing(List::size)) 的 Comparator 来指定它。但令人困惑的是sortedList 的返回类型。应该是List&lt;List&lt;String&gt;&gt; sortedList 而不是List&lt;String&gt; sortedList
  • 您的问题需要更多细节。您的预期输出是不够的。您的分拣要求到底是什么?元素的数量,每个元素的词法等级,如果两个列表具有相同数量和/或类型的元素该怎么办。等等?你需要明确。

标签: java arrays list sorting


【解决方案1】:

Arrays.compare 按字典顺序比较两个 Object 数组,在可比较的元素中。

试试这个。

List<List<String>> listOflists = Arrays.asList(
    Arrays.asList("x", "x"),
    Arrays.asList("x"),
    Arrays.asList("x", "x", "x")
);

List<List<String>> sortedList = listOflists.stream()
    .map(list -> list.toArray(String[]::new))
    .sorted((x, y) -> Arrays.compare(x, y))
    .map(array -> Arrays.asList(array))
    .collect(Collectors.toList());
System.out.println(sortedList);

输出:

[[x], [x, x], [x, x, x]]

如果你想按列表大小排序。

List<List<String>> sortedList = listOflists.stream()
    .sorted(Comparator.comparing(list -> list.size()))
    .collect(Collectors.toList());

【讨论】:

  • 哇! Arrays.compare 是一个非常好的功能:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2019-06-04
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多