Reputation: 79
How can I sort List of Lists by first element of every list? I have list like this:
[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]
And I want to
[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]
How can I do this using Stream?
Here is my code:
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
);
Upvotes: 0
Views: 376
Reputation: 271030
You could just call Comparator.comparing
for this:
List<List<String>> sortedList =
lis.stream().sorted(Comparator.comparing(x -> x.get(0)))
.collect(Collectors.toList());
You don't need streams if you just want to sort the list in place. List.sort
will do the job:
lis.sort(Comparator.comparing(x -> x.get(0)));
Also, don't use raw types. Write ArrayList<>
, not ArrayList
:
List<List<String>> lis = new ArrayList<>();
Upvotes: 3