Collectors - zaawansowane zbieranie

List<String> names = Arrays.asList("Ania", "Bartosz", "Adam", "Ola", "Beata");
 
// Złączenie stringów
String joined = names.stream()
    .collect(Collectors.joining(", ", "[", "]"));
// [Ania, Bartosz, Adam, Ola, Beata]
 
// Grupowanie
Map<Character, List<String>> byLetter = names.stream()
    .collect(Collectors.groupingBy(s -> s.charAt(0)));
// {A=[Ania, Adam], B=[Bartosz, Beata], O=[Ola]}
 
// Partycjonowanie (grupowanie wg predykatu)
Map<Boolean, List<String>> partition = names.stream()
    .collect(Collectors.partitioningBy(s -> s.length() > 3));
 
// Zliczanie per grupa
Map<Character, Long> countByLetter = names.stream()
    .collect(Collectors.groupingBy(s -> s.charAt(0), Collectors.counting()));
 
// Do mapy
Map<String, Integer> nameLengths = names.stream()
    .collect(Collectors.toMap(s -> s, String::length));