Рубрики
Без рубрики

Класс Коллекционеров Java – 18 Примеров

Java Collectors-это служебный класс, который предоставляет множество полезных реализаций интерфейса коллектора. Реализация сборщика используется с

Автор оригинала: Pankaj Kumar.

Java Collectors-это служебный класс, который предоставляет множество полезных реализаций интерфейса коллектора. Реализация сборщика используется с методом Stream collect (). Этот класс был представлен в Java 8 вместе с потоковым API. Коллекторы-это конечный класс, и все методы являются статическими, которые возвращают экземпляр Коллектора.

Методы коллекторов Java

Некоторые из популярных методов сбора Java являются:

  • Коллекция(Поставщик)
  • тоЛист()
  • Тосет()
  • toMap(Функция, Функция)
  • присоединение()
  • отображение(Функция, Коллектор)
  • фильтрация(Предикат, Коллектор)
  • Сбор и затем(Коллектор, Функция)
  • подсчет()
  • минБи(компаратор)
  • Максби(компаратор)
  • Суммирующая функция(ToIntFunction), суммируЮщая функция(ToLongFunction), суммирующая функция(ToDoubleFunction)
  • Усреднение по времени(функция toInt), усреднение по времени(функция toLong), усреднение по времени(функция ToDoubleFunction)
  • Группировка по(Функции)
  • Группирование по току(Функция)
  • Разделение по(предикату)
  • сокращение(Двоичный оператор)
  • Подведение итогов(функция toInt)
  • Лямбда-выражение Java
  • Ссылочные типы и примеры методов Java

Примеры коллекторов Java

Давайте рассмотрим примеры функций коллекторов на простых примерах.

1. Сбор средств(Поставщик)

Эта функция возвращает коллектор, который собирает входные элементы в коллекцию.

List strList = Arrays.asList("a", "b", "c", "b", "a");

// toCollection()
Collection strCollection = strList.parallelStream().collect(Collectors.toCollection(HashSet::new));
System.out.println(strCollection); // [a, b, c]

Set strSet = strList.parallelStream().collect(Collectors.toCollection(HashSet::new));
System.out.println(strSet); // [a, b, c]

List strList1 = strList.parallelStream().sorted(String::compareToIgnoreCase)
		.collect(Collectors.toCollection(ArrayList::new));
System.out.println(strList1); // [a, a, b, b, c]

2. Java – коллекторы ToList()

Он возвращает сборщик, который собирает входные элементы в новый список.

List strList = Arrays.asList("a", "b", "c", "b", "a");

List uppercaseList = strList.parallelStream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println(uppercaseList); // [A, B, C, B, A]

List uppercaseUnmodifiableList = strList.parallelStream().map(String::toUpperCase)
		.collect(Collectors.toUnmodifiableList());
System.out.println(uppercaseUnmodifiableList); // [A, B, C, B, A]

Коллекционеры Java должны перечислять

3. Набор коллекторов Java()

Этот метод возвращает сборщик, который собирает входные элементы в новый набор.

List strList = Arrays.asList("a", "b", "c", "b", "a");

Set uppercaseSet = strList.parallelStream().map(String::toUpperCase).collect(Collectors.toSet());
System.out.println(uppercaseSet); // [A, B, C]

Set uppercaseUnmodifiableSet = strList.parallelStream().map(String::toUpperCase)
		.collect(Collectors.toUnmodifiableSet());
System.out.println(uppercaseUnmodifiableSet); // [A, B, C]

4. Java – коллекторы toMap(Функция, Функция)

Этот статический метод возвращает коллектор для накопления входных элементов в новую карту. Мы должны указать функции отображения для создания ключей и значений карты.

Map map = Stream.of("a", "b", "c")
		.collect(Collectors.toMap(Function.identity(), String::toUpperCase));
System.out.println(map); // {a=A, b=B, c=C}

// Duplicate Keys will throw: Exception in thread "main"
// java.lang.IllegalStateException: Duplicate key a (attempted merging values A
// and A)
Map mapD = Stream.of("a", "b", "c", "b", "a")
		.collect(Collectors.toMap(Function.identity(), String::toUpperCase, String::concat));
System.out.println(mapD); // {a=AA, b=BB, c=C}

// above are HashMap, use below to create different types of Map
TreeMap mapTree = Stream.of("a", "b", "c", "b")
		.collect(Collectors.toMap(Function.identity(), String::toUpperCase, String::concat, TreeMap::new));
System.out.println(mapTree); {a=A, b=BB, c=C}

5. Присоединение к коллекторам Java()

Он возвращает коллектор, который объединяет входные элементы последовательности символов в новую строку. Существует несколько перегруженных методов для указания разделителя и строк суффикса/префикса.

String concat = Stream.of("a", "b").collect(Collectors.joining());
System.out.println(concat); // ab

String csv = Stream.of("a", "b").collect(Collectors.joining(","));
System.out.println(csv); // a,b

String csv1 = Stream.of("a", "b").collect(Collectors.joining(",", "[", "]"));
System.out.println(csv1); // [a,b]

String csv2 = Stream.of("a", new StringBuilder("b"), new StringBuffer("c")).collect(Collectors.joining(","));
System.out.println(csv2); // a,b

6. Отображение коллекторов Java(Функция, Коллектор)

Этот метод возвращает коллектор, который применяет функцию к входным элементам, а затем накапливает их в данный коллектор.

Set setStr = Stream.of("a", "a", "b")
		.collect(Collectors.mapping(String::toUpperCase, Collectors.toSet()));
System.out.println(setStr); // [A, B]

Set setStr1 = Stream.of("a", "a", "b")
		.collect(Collectors.flatMapping(s -> Stream.of(s.toUpperCase()), Collectors.toSet()));
System.out.println(setStr1); // [A, B]

7. фильтрация(Предикат, Коллектор)

Он возвращает сборщик, который применяет Предикат к входным элементам и накапливает их в данный сборщик, если предикат возвращает значение true.

List strList2 = List.of("1", "2", "10", "100", "20", "999");
Set set = strList2.parallelStream()
		.collect(Collectors.filtering(s -> s.length() < 2, Collectors.toSet()));
System.out.println(set); // [1, 2]

8. Сбор и затем(Сборщик, Функция)

Этот статический метод возвращает коллектор, который накапливает входные элементы в данный коллектор, а затем выполняет дополнительную функцию завершения.

List strList2 = List.of("1", "2", "10", "100", "20", "999");

List unmodifiableList = strList2.parallelStream()
		.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
System.out.println(unmodifiableList); // [1, 2, 10, 100, 20, 999]

9. подсчет()

Эта функция возвращает коллектор, который подсчитывает количество входных элементов.

Long evenCount = Stream.of(1, 2, 3, 4, 5).filter(x -> x % 2 == 0).collect(Collectors.counting());
System.out.println(evenCount); // 2

10. минБи(компаратор)

Он возвращает коллектор, который возвращает минимальный элемент на основе данного компаратора.

Optional min = Stream.of(1, 2, 3, 4, 5).collect(Collectors.minBy((x, y) -> x - y));
System.out.println(min); // Optional[1]

11. Максби(компаратор)

Этот метод возвращает коллектор, который возвращает максимальный элемент на основе данного компаратора.

Optional max = Stream.of(1, 2, 3, 4, 5).collect(Collectors.minBy((x, y) -> y - x));
System.out.println(max); // Optional[5]

12. Функция суммирования(ToIntFunction)

Этот статический метод возвращает коллектор, который создает сумму целочисленной функции, примененной к входным элементам. Существуют аналогичные функции для long и double – summingLong(функция toLong) и summingDouble(функция ToDoubleFunction).

List strList3 = Arrays.asList("1", "2", "3", "4", "5");
Integer sum = strList3.parallelStream().collect(Collectors.summingInt(Integer::parseInt));
System.out.println(sum); // 15

Long sumL = Stream.of("12", "23").collect(Collectors.summingLong(Long::parseLong));
System.out.println(sumL); // 35

Double sumD = Stream.of("1e2", "2e3").collect(Collectors.summingDouble(Double::parseDouble));
System.out.println(sumD); // 2100.0

13. Усреднение(функция toInt)

Он возвращает коллектор, который выдает среднее арифметическое целочисленной функции, примененной к входным элементам. Существуют аналогичные функции для long и double – averagingLong(функция toLong) и averagingDouble(функция ToDoubleFunction).

List strList4 = Arrays.asList("1", "2", "3", "4", "5");
Double average = strList4.parallelStream().collect(Collectors.averagingInt(Integer::parseInt));
System.out.println(average); // 3.0

Double averageL = Stream.of("12", "23").collect(Collectors.averagingLong(Long::parseLong));
System.out.println(averageL); // 17.5

Double averageD = Stream.of("1e2", "2e3").collect(Collectors.averagingDouble(Double::parseDouble));
System.out.println(averageD); // 1050.0

14. Группировка коллекторов Java по(Функции)

Этот метод возвращает сборщик, реализующий операцию “группировка по” для входных элементов. Конечным результатом является хэш-карта. Существует несколько перегруженных методов для указания Поставщика (окончательный тип карты, по умолчанию-HashMap) и Сборщика (тип списка значений, по умолчанию-ArrayList).

Map> mapGroupBy = Stream.of(1, 2, 3, 4, 5, 4, 3)
		.collect(Collectors.groupingBy(x -> x * 10));
System.out.println(mapGroupBy); // {50=[5], 20=[2], 40=[4, 4], 10=[1], 30=[3, 3]}

15. Группирование по току(Функция)

Он работает так же, как и коллектор groupingBy (). Единственное отличие состоит в том, что сборщик является параллельным и неупорядоченным. Он будет иметь лучшую производительность, чем сборщик groupingBy (), но порядок не будет сохранен.

Map> mapGroupBy = Stream.of(1, 2, 3, 4, 5, 4, 3)
		.collect(Collectors.groupingByConcurrent(x -> x * 10));
System.out.println(mapGroupBy); // {50=[5], 20=[2], 40=[4, 4], 10=[1], 30=[3, 3]}

16. Разделение по(предикату)

Этот метод возвращает сборщик, который разбивает входные элементы в соответствии с Предикатом и организует их в карту<Логическое значение, список>.

Map> mapPartitionBy = Stream.of(1, 2, 3, 4, 5, 4, 3)
		.collect(Collectors.partitioningBy(x -> x % 2 == 0));
System.out.println(mapPartitionBy); // {false=[1, 3, 5, 3], true=[2, 4, 4]}

17. Сокращение коллекторов Java(BinaryОператор)

Он возвращает коллектор, который выполняет сокращение своих входных элементов в соответствии с указанным двоичным оператором. Это в основном используется при многоуровневом сокращении, например, при указании нижестоящего коллектора с помощью методов группировки по() и разделения по ().

Map> reducing = Stream.of(1, 2, 3, 4, 5, 4, 3).collect(Collectors.partitioningBy(
		x -> x % 2 == 0, Collectors.reducing(BinaryOperator.maxBy(Comparator.comparing(Integer::intValue)))));
System.out.println(reducing); // {false=Optional[5], true=Optional[4]}

18. подведение итогов Int(функция toInt)

Он возвращает сборщик, который применяет функцию сопоставления, создающую int, к каждому входному элементу, и возвращает сводную статистику для результирующих значений, таких как min, max, среднее значение, количество и количество.

IntSummaryStatistics summarizingInt = Stream.of("12", "23", "35")
    .collect(Collectors.summarizingInt(Integer::parseInt));
System.out.println(summarizingInt);
//IntSummaryStatistics{count=3, sum=70, min=12, average=23.333333, max=35}

Вывод

Статические методы класса Java Collectors очень полезны при создании экземпляра коллектора для использования с методом Stream collect (). Он охватывает почти все самые популярные сценарии.

Рекомендации