Класс Gatherers
java.lang.Object
java.util.stream.Gatherers
public final class Gatherers extends Object
Реализации
Gatherer, предоставляющие полезные промежуточные операции, такие как функции формирования окон, функции свёртки, параллельное преобразование элементов и т. д.- Начиная с:
- 24
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static <T, |
fold |
Возвращает Gatherer, выполняющий упорядоченное преобразование, подобное сведению, для сценариев, в которых невозможно реализовать функцию-комбинатор, или для сведений, изначально зависящих от порядка. |
static <T, |
mapConcurrent |
Операция, выполняющая функцию параллельно с настроенным максимальным уровнем параллелизма с использованием виртуальных потоков. |
static <T, |
scan |
Возвращает Gatherer, выполняющий префиксное сканирование — инкрементальное накопление — с помощью предоставленных функций. |
static <TR> Gatherer |
windowFixed |
Возвращает Gatherer, собирающий элементы в окна — группы элементов в порядке их появления — фиксированного размера. |
static <TR> Gatherer |
windowSliding |
Возвращает Gatherer, собирающий элементы в окна — группы элементов в порядке их появления — заданного размера, где каждое последующее окно включает все элементы предыдущего окна, кроме самого раннего, и добавляет следующий элемент потока. |
Подробное описание методов
windowFixed
public static <TR> Gatherer<TR,?,List<TR>> windowFixed(int windowSize)
Возвращает Gatherer, собирающий элементы в окна — группы элементов в порядке их появления — фиксированного размера. Если поток пуст, окна созданы не будут. Последнее окно может содержать меньше элементов, чем заданный размер окна.
Пример:
// will contain: [[1, 2, 3], [4, 5, 6], [7, 8]]
List<List<Integer>> windows =
Stream.of(1,2,3,4,5,6,7,8).gather(Gatherers.windowFixed(3)).toList();
- Примечание API:
- Для повышения эффективности окна могут выделяться непрерывно и заранее. Это означает, что выбор большого размера окна для небольших потоков может привести к чрезмерному расходу памяти во время выполнения этой операции.
- Требования к реализации:
- Каждое созданное окно представляет собой неизменяемый список; вызов любого метода-мутатора всегда приведёт к выбрасыванию
UnsupportedOperationException. Тип реализации и сериализуемость созданных списков не гарантируются. - Параметры типа:
TR— тип элементов, потребляемых возвращаемым сборщиком, и содержимого создаваемых им окон- Параметры:
-
windowSize— размер окон - Возвращает:
- новый сборщик, группирующий элементы в окна фиксированного размера
- Выбрасывает:
-
IllegalArgumentException— еслиwindowSizeменьше 1
windowSliding
public static <TR> Gatherer<TR,?,List<TR>> windowSliding(int windowSize)
Возвращает Gatherer, собирающий элементы в окна — группы элементов в порядке их появления — заданного размера, где каждое последующее окно включает все элементы предыдущего окна, кроме самого раннего, и добавляет следующий элемент потока. Если поток пуст, окна созданы не будут. Если размер потока меньше размера окна, будет создано только одно окно, содержащее все элементы потока.
Пример:
// will contain: [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8]]
List<List<Integer>> windows2 =
Stream.of(1,2,3,4,5,6,7,8).gather(Gatherers.windowSliding(2)).toList();
// will contain: [[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8]]
List<List<Integer>> windows6 =
Stream.of(1,2,3,4,5,6,7,8).gather(Gatherers.windowSliding(6)).toList();
- Примечание API:
- Для повышения эффективности окна могут выделяться непрерывно и заранее. Это означает, что выбор большого размера окна для небольших потоков может привести к чрезмерному расходу памяти во время выполнения этой операции.
- Требования к реализации:
- Каждое созданное окно представляет собой неизменяемый список; вызов любого метода-мутатора всегда приведёт к выбрасыванию
UnsupportedOperationException. Тип реализации и сериализуемость созданных списков не гарантируются. - Параметры типа:
TR— тип элементов, потребляемых возвращаемым сборщиком, и содержимого создаваемых им окон- Параметры:
-
windowSize— размер окон - Возвращает:
- новый сборщик, группирующий элементы в скользящие окна
- Выбрасывает:
-
IllegalArgumentException— если windowSize меньше 1
fold
public static <T,R> Gatherer<T,?,R> fold(Supplier<R> initial, BiFunction<? super R, ? super T, ? extends R> folder)
Возвращает Gatherer, выполняющий упорядоченное преобразование, подобное сведению, для сценариев, в которых невозможно реализовать функцию-комбинатор, или для сведений, изначально зависящих от порядка.
- Требования к реализации:
- Если при обработке не возникает исключений, эта операция всегда создаёт только один элемент.
Пример:
// will contain: Optional["123456789"] Optional<String> numberString = Stream.of(1,2,3,4,5,6,7,8,9) .gather( Gatherers.fold(() -> "", (string, number) -> string + number) ) .findFirst(); - Параметры типа:
T— тип элементов, потребляемых возвращаемым сборщикомR— тип элементов, создаваемых возвращаемым сборщиком- Параметры:
-
initial— начальное значение для операции свёртки -
folder— функция свёртки - Возвращает:
- новый Gatherer
- Выбрасывает:
-
NullPointerException— если какой-либо из параметров равенnull - См. также:
scan
public static <T,R> Gatherer<T,?,R> scan(Supplier<R> initial, BiFunction<? super R, ? super T, ? extends R> scanner)
Возвращает Gatherer, выполняющий префиксное сканирование — инкрементальное накопление — с помощью предоставленных функций. Начиная с начального значения, полученного от
Supplier, каждое последующее значение получается применением BiFunction к текущему значению и следующему входному элементу, после чего полученное значение передаётся далее по потоку. Пример:
// will contain: ["1", "12", "123", "1234", "12345", "123456", "1234567", "12345678", "123456789"]
List<String> numberStrings =
Stream.of(1,2,3,4,5,6,7,8,9)
.gather(
Gatherers.scan(() -> "", (string, number) -> string + number)
)
.toList();
- Параметры типа:
T— тип элементов, потребляемых этим сборщикомR— тип элементов, создаваемых этим сборщиком- Параметры:
-
initial— поставщик начального значения для сканера -
scanner— функция, применяемая к каждому элементу - Возвращает:
- новый сборщик, выполняющий префиксное сканирование
- Выбрасывает:
-
NullPointerException— если какой-либо из параметров равенnull
mapConcurrent
public static <T,R> Gatherer<T,?,R> mapConcurrent(int maxConcurrency, Function<? super T, ? extends R> mapper)
Операция, выполняющая функцию параллельно с настроенным максимальным уровнем параллелизма с использованием виртуальных потоков. Эта операция сохраняет порядок элементов потока.
- Примечание API:
- Предпринимаются все возможные усилия для отмены выполняющихся задач в ситуациях, когда нижестоящий этап больше не хочет получать элементы.
- Требования к реализации:
- Если результат функции должен быть передан далее по потоку, но функция завершилась с исключением, этот метод вместо этого повторно выбросит соответствующее исключение как экземпляр
RuntimeException, после чего все оставшиеся задачи будут отменены. - Параметры типа:
T— тип входных данныхR— тип выходных данных- Параметры:
-
maxConcurrency— желаемый максимальный уровень параллелизма -
mapper— функция, выполняемая параллельно - Возвращает:
- новый Gatherer
- Выбрасывает:
-
IllegalArgumentException— еслиmaxConcurrencyменьше 1 -
NullPointerException— еслиmapperравенnull
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/stream/Gatherers.html