【发布时间】:2019-12-02 17:37:53
【问题描述】:
如何按每个列表的第一个元素对列表列表进行排序?我有这样的清单:
[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
);
【问题讨论】:
-
你的代码有什么问题?
-
既然你已经知道
collect,你可以在第一个流管道中用add去掉forEach。您没有提到,maxSize在这个问题中的相关性是什么。
标签: java sorting java-stream