Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Collectors in Java 8

Overview

The Collectors utility class in Java 8 provides various implementations of the Collector interface. These collectors can be used to collect stream elements into collections, aggregate values, and perform various other reduction operations. The Collectors class provides several predefined collector implementations for most common operations.

Common Collectors

Some of the most commonly used collectors are:

  • toList(): Collects elements into a List.
  • toSet(): Collects elements into a Set.
  • toMap(): Collects elements into a Map.
  • joining(): Concatenates elements into a String.
  • counting(): Counts the number of elements.
  • summarizingInt(), summarizingDouble(), summarizingLong(): Collects statistics such as count, sum, min, average, and max.
  • groupingBy(): Groups elements by a classifier function.
  • partitioningBy(): Partitions elements based on a predicate.

Example: Collecting to List and Set

import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class CollectorsExample {
    public static void main(String[] args) {
        List list = Arrays.asList("apple", "banana", "orange", "apple");

        // Collecting to List
        List resultList = list.stream()
                                      .collect(Collectors.toList());
        System.out.println("List: " + resultList);

        // Collecting to Set
        Set resultSet = list.stream()
                                    .collect(Collectors.toSet());
        System.out.println("Set: " + resultSet);
    }
}

Example: Collecting to Map

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class CollectorsExample {
    public static void main(String[] args) {
        List list = Arrays.asList("apple", "banana", "orange");

        // Collecting to Map
        Map resultMap = list.stream()
                                             .collect(Collectors.toMap(
                                                 fruit -> fruit,
                                                 fruit -> fruit.length()
                                             ));
        resultMap.forEach((k, v) -> System.out.println(k + ": " + v));
    }
}

Example: Joining Strings

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class CollectorsExample {
    public static void main(String[] args) {
        List list = Arrays.asList("apple", "banana", "orange");

        // Joining strings
        String result = list.stream()
                            .collect(Collectors.joining(", "));
        System.out.println("Joined: " + result);
    }
}

Example: Counting Elements

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class CollectorsExample {
    public static void main(String[] args) {
        List list = Arrays.asList("apple", "banana", "orange");

        // Counting elements
        long count = list.stream()
                         .collect(Collectors.counting());
        System.out.println("Count: " + count);
    }
}

Example: Summarizing Statistics

import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;

public class CollectorsExample {
    public static void main(String[] args) {
        List list = Arrays.asList(1, 2, 3, 4, 5, 6);

        // Summarizing statistics
        IntSummaryStatistics stats = list.stream()
                                         .collect(Collectors.summarizingInt(Integer::intValue));
        System.out.println("Count: " + stats.getCount());
        System.out.println("Sum: " + stats.getSum());
        System.out.println("Min: " + stats.getMin());
        System.out.println("Average: " + stats.getAverage());
        System.out.println("Max: " + stats.getMax());
    }
}

Example: Grouping Elements

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class CollectorsExample {
    public static void main(String[] args) {
        List list = Arrays.asList("apple", "banana", "orange", "blueberry", "blackberry");

        // Grouping by first letter
        Map> groupedByFirstLetter = list.stream()
                                                                .collect(Collectors.groupingBy(fruit -> fruit.charAt(0)));
        groupedByFirstLetter.forEach((k, v) -> System.out.println(k + ": " + v));
    }
}

Example: Partitioning Elements

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class CollectorsExample {
    public static void main(String[] args) {
        List list = Arrays.asList("apple", "banana", "orange", "blueberry", "blackberry");

        // Partitioning by length
        Map> partitionedByLength = list.stream()
                                                             .collect(Collectors.partitioningBy(fruit -> fruit.length() > 5));
        partitionedByLength.forEach((k, v) -> System.out.println(k + ": " + v));
    }
}

Conclusion

The Collectors utility class in Java 8 provides powerful and flexible ways to collect stream elements. Whether you need to collect elements into collections, aggregate values, or group and partition data, Collectors offers a comprehensive set of tools to perform these operations efficiently and concisely.