Как использовать операции сокращения Java Collect()?

Как использовать операции сокращения Java Collect() Изучение

Потоковые коллекторы — это мощная функция Java 8 Stream API, позволяющая эффективно собирать и обрабатывать данные. Мы объясним структуру и возможные варианты использования метода collect в Java.

Каково использование Java Collect()?

Сборщик потока можно использовать для создания списка, набора или сопоставления из потока. Поток — это последовательность элементов, которые обрабатываются один за другим. Интерфейс Collector предоставляет набор операций сокращения данных в потоковом конвейере. Это терминальные операции, которые собирают и объединяют результаты промежуточных шагов.

Например, коллекторы можно использовать для фильтрации или сортировки объектов из потока. Также возможно агрегирование, например, суммирование чисел, суммирование строк или подсчет элементов. Кроме того, у сборщиков есть функции для преобразования содержимого потока в определенную структуру. Например, вы можете превратить список в карту. Группы помогают классифицировать элементы с определенными свойствами или условиями. Что наиболее важно, у Stream Collectors есть преимущество параллельной обработки данных с использованием нескольких потоков. В результате операции, особенно с большими объемами данных, могут выполняться намного быстрее и эффективнее.

Это синтаксис Java Collect()

Метод принимает Collector в качестве аргумента, описывающего, как собирать и объединять элементы потока. Сборщик — это интерфейс, который предоставляет различные методы для сборки элементов потока в определенную форму, например. B. в списке, наборе или карте.

Существует два типа метода сбора Java:

  1. R collect (поставщик Supplier, накопитель BiConsumer<R, ? super T>, объединитель BiConsumer<R, R>)
  2. <R, A> R collect(Коллектор <? super T, A, R> коллектор)

Первый вариант имеет в качестве аргументов три функции:

  • поставщик : создает контейнер, используемый для промежуточных результатов.
  • аккумулятор : вычисляет окончательный результат.
  • комбинатор : объединяет результаты операций с параллельными потоками.

Эти предопределенные сборщики уже включены в стандартную библиотеку и могут быть легко импортированы и использованы.

Читайте также:  Полное руководство по использованию метода Date.prototype.toLocaleString в JavaScript

Второй вариант принимает коллектор в качестве аргумента и возвращает результат.

  • R : тип результата
  • T : тип элементов в потоке
  • A : тип аккумулятора, в котором хранится промежуточное состояние работы коллектора.
  • collector : выполняет операцию редукции.

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

Практические примеры использования Java Collect()

Далее мы иллюстрируем различные функции метода Stream.collect(). Вы уже должны быть знакомы с основными операторами Java, прежде чем углубляться в Collection Framework.

Объединить список строк

Используя Java Collect(), мы можем объединить список строк, чтобы получить новую строку:

List<String> letters = List.of("a", "b", "c", "d", "e");

// without combiner function
StringBuilder result = letters.stream().collect(StringBuilder::new, (x, y) -> x.append(y),
		(a, b) -> a.append(",").append(b));
System.out.println(result.toString());

// with combiner function
StringBuilder result1 = letters.parallelStream().collect(StringBuilder::new, (x, y) -> x.append(y),
		(a, b) -> a.append(",").append(b));
System.out.println(result1.toString());

Мы получаем вывод:

abcde
a, b, c, d, e

В первом вычислении используется только один экземпляр StringBuilder, и функция объединения не использовалась. Поэтому результат есть abcde.

Во втором выводе мы видим, что функция объединения объединила экземпляры StringBuilder и разделила их запятой.

Собирать элементы в список с помощью toList()

С помощью функции мы можем выбрать определенные элементы списка и сохранить их в новом списке.filter()toList()

List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7);

List<Integer> oddNumbers = numbers.stream().filter(x -> x % 2 != 0).collect(Collectors.toList());
System.out.println(oddNumbers);

Новый список теперь содержит только нечетные числа:

[1, 3, 5, 7]

Соберите элементы в набор с помощью toSet()

Точно так же мы можем создать новый набор из выбранных элементов. Порядок может быть неупорядоченным в наборе.

List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7);

Set<Integer> evenNumbers = numbers.parallelStream().filter(x -> x % 2 == 0).collect(Collectors.toSet());
System.out.println(evenNumbers);

Это приводит к выводу:

[2, 4, 6]

Соберите элементы на карту, используя toMap()

Читайте также:  Гид по модулям в программировании для всех уровней - от новичков до профессионалов

Карта в сочетании с Java Collect() присваивает значение каждому ключу.

List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7);

Map<Integer, String> mapEvenNumbers = numbers.parallelStream().filter(x -> x % 2 == 0)
		.collect(Collectors.toMap(Function.identity(), x -> String.valueOf(x)));
System.out.println(mapEvenNumbers);

В выводе мы видим, что ввод, состоящий из четных чисел, был сопоставлен с его идентичными значениями:

{2=2, 4=4, 6=6}

Объедините элементы в строку, используя joining()

Метод добавляет каждый элемент в поток в порядке их появления и использует разделитель для разделения элементов. Разделитель передается в качестве аргумента. Если разделитель не указан, используйте пустую строку .joining()joining()joining()""

jshell> String result1 = Stream.of("a", "b", "c").collect(Collectors.joining());

jshell> String result2 = Stream.of("a", "b", "c").collect(Collectors.joining(",", "{", "}"));

Результаты:

result1 ==> "abc"
result2 ==> "{a,b,c}"

Оцените статью
Блог о программировании
Добавить комментарий