java - 如何按每个列表的第一个元素对 List<List<String>> 进行排序?

标签 java sorting java-stream

如何按每个列表的第一个元素对列表列表进行排序?我有这样的列表:

[angel, angle, galen, glean, lange]
[abel, able, bale, bela, elba]
[elan, lane, lean, lena, neal]
[caret, carte, cater, crate, trace]
[evil, levi, live, veil, vile]
[alger, glare, lager, large, regal]

我想要

[abel, able, bale, bela, elba]
[alger, glare, lager, large, regal]
[angel, angle, galen, glean, lange]
[caret, carte, cater, crate, trace]
[elan, lane, lean, lena, neal]
[evil, levi, live, veil, vile]

如何使用 Stream 执行此操作?

这是我的代码:

List<List<String>> lis = new ArrayList();

stream.collect(Collectors.groupingBy(s -> getAnagramKey(s)))
    .values().stream()
    .sorted(Collections.reverseOrder(Comparator.comparingInt(List::size)))
    .limit(15)
    .forEach(e -> {
    lis.add(e);
 });

final int maxSize = lis.stream().map(List::size).max(Integer::compare).orElse(0);

lis.stream()
    .filter(e -> e.size() == maxSize)
    .forEach(System.out::println
);

最佳答案

您可以调用Comparator.comparing为此:

List<List<String>> sortedList = 
    lis.stream().sorted(Comparator.comparing(x -> x.get(0)))
        .collect(Collectors.toList());

如果您只想对列表进行排序,则不需要流。 List.sort将完成这项工作:

lis.sort(Comparator.comparing(x -> x.get(0)));

另外,不要使用原始类型。写ArrayList<> ,不是ArrayList :

List<List<String>> lis = new ArrayList<>();

关于java - 如何按每个列表的第一个元素对 List<List<String>> 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59144053/

相关文章:

javascript - 在 Javascript 中基于语言环境的排序,以预定义的方式对重音字母和其他变体进行排序

java - Sort native 方法 Java 的问题

java - 分解代码,唯一的区别是流减少操作

java - 如何使用 Java 8 Stream 从 Map 列表中的字符串获取列表?

java - 如何在运行时编译代码

Java邮件API : Accessing "All Mail" folder of GMAIL mailbox

jquery - 通过使用日期(按日期)在元素之间插入元素

java-8 - 方法引用不履行功能接口(interface)契约,但可以编译。怎么可能?

java - A* 探路者给出次优路径

java - 如何在TableModelEvent中获取JTable