Spec-Zone.ru › OpenJDK 25

Интерфейс IntStream

Все суперинтерфейсы:
AutoCloseable, BaseStream<Integer, IntStream>
public interface IntStream extends BaseStream<Integer, IntStream>
Последовательность элементов примитивного типа int, поддерживающая последовательные и параллельные агрегатные операции. Это примитивная специализация int интерфейса Stream.

Следующий пример иллюстрирует агрегатную операцию с использованием Stream и IntStream, вычисляющую сумму весов красных виджетов:

    int sum = widgets.stream()
                     .filter(w -> w.getColor() == RED)
                     .mapToInt(w -> w.getWeight())
                     .sum();
Дополнительные сведения о потоках, операциях над потоками, конвейерах потоков и параллелизме см. в документации класса Stream и документации пакета java.util.stream.
Начиная с:
1.8
См. также:
  • Stream
  • java.util.stream

Краткое описание вложенных классов

Модификатор и тип Интерфейс Описание
static interface  IntStream.Builder
Изменяемый построитель для IntStream.
static interface  IntStream.IntMapMultiConsumer
Представляет операцию, принимающую аргумент типа int и IntConsumer и не возвращающую результат.

Краткое описание методов

Модификатор и тип Метод Описание
boolean allMatch(IntPredicate predicate)
Возвращает значение, указывающее, соответствуют ли все элементы этого потока заданному предикату.
boolean anyMatch(IntPredicate predicate)
Возвращает значение, указывающее, соответствует ли какой-либо элемент этого потока заданному предикату.
DoubleStream asDoubleStream()
Возвращает DoubleStream, состоящий из элементов этого потока, преобразованных в double.
LongStream asLongStream()
Возвращает LongStream, состоящий из элементов этого потока, преобразованных в long.
OptionalDouble average()
Возвращает OptionalDouble, описывающий среднее арифметическое элементов этого потока, или пустой optional, если поток пуст.
Stream<Integer> boxed()
Возвращает Stream, состоящий из элементов этого потока, каждый из которых преобразован в объект Integer.
static IntStream.Builder builder()
Возвращает построитель для IntStream.
<R> R collect(Supplier<R> supplier, ObjIntConsumer<R> accumulator, BiConsumer<R,R> combiner)
Выполняет операцию изменяемой редукции над элементами этого потока.
static IntStream concat(IntStream a, IntStream b)
Создает лениво объединенный поток, элементы которого сначала состоят из всех элементов первого потока, а затем из всех элементов второго потока.
long count()
Возвращает количество элементов в этом потоке.
IntStream distinct()
Возвращает поток, состоящий из уникальных элементов этого потока.
default IntStream dropWhile(IntPredicate predicate)
Если этот поток упорядочен, возвращает поток, состоящий из оставшихся элементов этого потока после удаления самого длинного префикса элементов, соответствующих заданному предикату.
static IntStream empty()
Возвращает пустой последовательный IntStream.
IntStream filter(IntPredicate predicate)
Возвращает поток, состоящий из элементов этого потока, соответствующих заданному предикату.
OptionalInt findAny()
Возвращает OptionalInt, описывающий некоторый элемент потока, или пустой OptionalInt, если поток пуст.
OptionalInt findFirst()
Возвращает OptionalInt, описывающий первый элемент этого потока, или пустой OptionalInt, если поток пуст.
IntStream flatMap(IntFunction<? extends IntStream> mapper)
Возвращает поток, состоящий из результатов замены каждого элемента этого потока содержимым отображенного потока, полученного применением заданной функции отображения к каждому элементу.
void forEach(IntConsumer action)
Выполняет действие для каждого элемента этого потока.
void forEachOrdered(IntConsumer action)
Выполняет действие для каждого элемента этого потока, гарантируя, что элементы потоков с заданным порядком обхода обрабатываются именно в этом порядке.
static IntStream generate(IntSupplier s)
Возвращает бесконечный последовательный неупорядоченный поток, в котором каждый элемент создается заданным IntSupplier.
static IntStream iterate(int seed, IntPredicate hasNext, IntUnaryOperator next)
Возвращает последовательный упорядоченный IntStream, полученный путем итеративного применения заданной функции next к начальному элементу при условии, что он удовлетворяет заданному предикату hasNext.
static IntStream iterate(int seed, IntUnaryOperator f)
Возвращает бесконечный последовательный упорядоченный IntStream, полученный путем итеративного применения функции f к начальному элементу seed с созданием Stream, состоящего из seed, f(seed), f(f(seed)) и т. д.
IntStream limit(long maxSize)
Возвращает поток, состоящий из элементов этого потока, обрезанный до длины не более maxSize.
IntStream map(IntUnaryOperator mapper)
Возвращает поток, состоящий из результатов применения заданной функции к элементам этого потока.
default IntStream mapMulti(IntStream.IntMapMultiConsumer mapper)
Возвращает поток, состоящий из результатов замены каждого элемента этого потока несколькими элементами — от нуля и более.
DoubleStream mapToDouble(IntToDoubleFunction mapper)
Возвращает DoubleStream, состоящий из результатов применения заданной функции к элементам этого потока.
LongStream mapToLong(IntToLongFunction mapper)
Возвращает LongStream, состоящий из результатов применения заданной функции к элементам этого потока.
<U> Stream<U> mapToObj(IntFunction<? extends U> mapper)
Возвращает поток объектных значений Stream, состоящий из результатов применения заданной функции к элементам этого потока.
OptionalInt max()
Возвращает OptionalInt, описывающий максимальный элемент этого потока, или пустой optional, если поток пуст.
OptionalInt min()
Возвращает OptionalInt, описывающий минимальный элемент этого потока, или пустой optional, если поток пуст.
boolean noneMatch(IntPredicate predicate)
Возвращает значение, указывающее, не соответствует ли ни один элемент этого потока заданному предикату.
static IntStream of(int t)
Возвращает последовательный IntStream, содержащий один элемент.
static IntStream of(int... values)
Возвращает последовательный упорядоченный поток, элементами которого являются указанные значения.
IntStream peek(IntConsumer action)
Возвращает поток, состоящий из элементов этого потока и дополнительно выполняющий заданное действие над каждым элементом при его извлечении из результирующего потока.
static IntStream range(int startInclusive, int endExclusive)
Возвращает последовательный упорядоченный IntStream от startInclusive (включительно) до endExclusive (не включая) с шагом 1.
static IntStream rangeClosed(int startInclusive, int endInclusive)
Возвращает последовательный упорядоченный IntStream от startInclusive (включительно) до endInclusive (включительно) с шагом 1.
int reduce(int identity, IntBinaryOperator op)
Выполняет редукцию элементов этого потока, используя заданное начальное значение и ассоциативную функцию накопления, и возвращает результат редукции.
OptionalInt reduce(IntBinaryOperator op)
Выполняет редукцию элементов этого потока с использованием ассоциативной функции накопления и возвращает OptionalInt, описывающий результат редукции, если он существует.
IntStream skip(long n)
Возвращает поток, состоящий из оставшихся элементов этого потока после удаления первых n элементов.
IntStream sorted()
Возвращает поток, состоящий из элементов этого потока в отсортированном порядке.
int sum()
Возвращает сумму элементов этого потока.
IntSummaryStatistics summaryStatistics()
Возвращает IntSummaryStatistics, описывающий различные сводные данные об элементах этого потока.
default IntStream takeWhile(IntPredicate predicate)
Если этот поток упорядочен, возвращает поток, состоящий из самого длинного префикса элементов этого потока, соответствующих заданному предикату.
int[] toArray()
Возвращает массив, содержащий элементы этого потока.

Методы, объявленные в интерфейсе BaseStream

close, isParallel, iterator, onClose, parallel, sequential, spliterator, unordered

Подробное описание методов

filter

IntStream filter(IntPredicate predicate)
Возвращает поток, состоящий из элементов этого потока, соответствующих заданному предикату.

Это промежуточная операция.

Параметры:
predicate — не взаимодействующий с источником, без состояния предикат, применяемый к каждому элементу для определения, следует ли его включить
Возвращает:
новый поток

map

IntStream map(IntUnaryOperator mapper)
Возвращает поток, состоящий из результатов применения заданной функции к элементам этого потока.

Это промежуточная операция.

Параметры:
mapper — не взаимодействующая с источником, без состояния функция, применяемая к каждому элементу
Возвращает:
новый поток

mapToObj

<U> Stream<U> mapToObj(IntFunction<? extends U> mapper)
Возвращает поток объектов Stream, состоящий из результатов применения заданной функции к элементам этого потока.

Это промежуточная операция.

Параметры типа:
U — тип элементов нового потока
Параметры:
mapper — не взаимодействующая с источником, без состояния функция, применяемая к каждому элементу
Возвращает:
новый поток

mapToLong

LongStream mapToLong(IntToLongFunction mapper)
Возвращает LongStream, состоящий из результатов применения заданной функции к элементам этого потока.

Это промежуточная операция.

Параметры:
mapper — не взаимодействующая с источником, без состояния функция, применяемая к каждому элементу
Возвращает:
новый поток

mapToDouble

DoubleStream mapToDouble(IntToDoubleFunction mapper)
Возвращает DoubleStream, состоящий из результатов применения заданной функции к элементам этого потока.

Это промежуточная операция.

Параметры:
mapper — не взаимодействующая с источником, без состояния функция, применяемая к каждому элементу
Возвращает:
новый поток

flatMap

IntStream flatMap(IntFunction<? extends IntStream> mapper)
Возвращает поток, состоящий из результатов замены каждого элемента этого потока содержимым отображённого потока, полученного применением предоставленной функции отображения к каждому элементу. Каждый отображённый поток closed после добавления его содержимого в этот поток. (Если отображённый поток null, вместо него используется пустой поток.)

Это промежуточная операция.

Параметры:
mapper — не взаимодействующая с источником, без состояния функция, применяемая к каждому элементу и возвращающая IntStream новых значений
Возвращает:
новый поток
См. также:
  • Stream.flatMap(Function)

mapMulti

default IntStream mapMulti(IntStream.IntMapMultiConsumer mapper)
Возвращает поток, состоящий из результатов замены каждого элемента этого потока несколькими элементами, а именно нулём или более элементами. Замена выполняется применением предоставленной функции отображения к каждому элементу совместно с аргументом потребителя, принимающим заменяющие элементы. Функция отображения вызывает потребителя ноль или более раз для предоставления заменяющих элементов.

Это промежуточная операция.

Если аргумент потребителя используется вне области вызова функции отображения, результаты не определены.

Требования к реализации:
Реализация по умолчанию вызывает для этого потока flatMap, передавая функцию, работающую следующим образом. Сначала она вызывает функцию отображения с IntConsumer, накапливающим заменяющие элементы во вновь созданном внутреннем буфере. Когда функция отображения возвращает результат, создаётся IntStream из внутреннего буфера. Наконец, этот поток возвращается для flatMap.
Параметры:
mapper — не взаимодействующая с источником, без состояния функция, генерирующая заменяющие элементы
Возвращает:
новый поток
С версии:
16
См. также:
  • Stream.mapMulti

distinct

IntStream distinct()
Возвращает поток, состоящий из уникальных элементов этого потока.

Это промежуточная операция с состоянием.

Возвращает:
новый поток

sorted

IntStream sorted()
Возвращает поток, состоящий из элементов этого потока в отсортированном порядке.

Это промежуточная операция с состоянием.

Возвращает:
новый поток

peek

IntStream peek(IntConsumer action)
Возвращает поток, состоящий из элементов этого потока, дополнительно выполняя предоставленное действие над каждым элементом по мере его обработки в результирующем потоке.

Это промежуточная операция.

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

Примечание к API:
Этот метод существует главным образом для поддержки отладки, когда требуется видеть элементы, проходящие через определённую точку конвейера:
    IntStream.of(1, 2, 3, 4)
        .filter(e -> e > 2)
        .peek(e -> System.out.println("Filtered value: " + e))
        .map(e -> e * e)
        .peek(e -> System.out.println("Mapped value: " + e))
        .sum();

Если реализация потока может оптимизировать создание некоторых или всех элементов (например, при операциях с коротким замыканием, таких как findFirst, или в примере, описанном в count()), действие для этих элементов вызвано не будет.

Параметры:
action — не взаимодействующее с источником действие, выполняемое над элементами по мере их обработки в потоке
Возвращает:
новый поток

limit

IntStream limit(long maxSize)
Возвращает поток, состоящий из элементов этого потока, усечённый до длины не более maxSize.

Это промежуточная операция с состоянием и коротким замыканием.

Примечание к API:
Хотя limit() обычно является недорогой операцией в последовательных конвейерах потоков, в упорядоченных параллельных конвейерах она может быть весьма затратной, особенно при больших значениях maxSize, поскольку limit(n) должна возвращать не любые n элементов, а именно первые n элементов в порядке обхода. Использование неупорядоченного источника потока (например, generate(IntSupplier)) или снятие ограничения на порядок с помощью BaseStream.unordered() может значительно ускорить limit() в параллельных конвейерах, если это допускает семантика вашей задачи. Если необходимо сохранить порядок обхода, а при использовании limit() в параллельных конвейерах наблюдаются низкая производительность или чрезмерное потребление памяти, переход к последовательному выполнению с помощью BaseStream.sequential() может повысить производительность.
Параметры:
maxSize — количество элементов, до которого следует ограничить поток
Возвращает:
новый поток
Выбрасывает:
IllegalArgumentException — если maxSize отрицательно

skip

IntStream skip(long n)
Возвращает поток, состоящий из оставшихся элементов этого потока после отбрасывания первых n элементов. Если в этом потоке меньше n элементов, будет возвращён пустой поток.

Это промежуточная операция с состоянием.

Примечание к API:
Хотя skip() обычно является недорогой операцией в последовательных конвейерах потоков, в упорядоченных параллельных конвейерах она может быть весьма затратной, особенно при больших значениях n, поскольку skip(n) должна пропускать не любые n элементов, а именно первые n элементов в порядке обхода. Использование неупорядоченного источника потока (например, generate(IntSupplier)) или снятие ограничения на порядок с помощью BaseStream.unordered() может значительно ускорить skip() в параллельных конвейерах, если это допускает семантика вашей задачи. Если необходимо сохранить порядок обхода, а при использовании skip() в параллельных конвейерах наблюдаются низкая производительность или чрезмерное потребление памяти, переход к последовательному выполнению с помощью BaseStream.sequential() может повысить производительность.
Параметры:
n — количество начальных элементов, которые следует пропустить
Возвращает:
новый поток
Выбрасывает:
IllegalArgumentException — если n отрицательно

takeWhile

default IntStream takeWhile(IntPredicate predicate)
Если поток упорядочен, возвращает поток, состоящий из самого длинного префикса элементов этого потока, соответствующих заданному предикату. Если поток не упорядочен, возвращает поток, состоящий из подмножества элементов этого потока, соответствующих заданному предикату.

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

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

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

Это промежуточная операция с состоянием и коротким замыканием.

Примечание к API:
Хотя takeWhile() обычно является недорогой операцией в последовательных конвейерах потоков, в упорядоченных параллельных конвейерах она может быть весьма затратной, поскольку операция должна возвращать не любой допустимый префикс, а самый длинный префикс элементов в порядке обхода. Использование неупорядоченного источника потока (например, generate(IntSupplier)) или снятие ограничения на порядок с помощью BaseStream.unordered() может значительно ускорить takeWhile() в параллельных конвейерах, если это допускает семантика вашей задачи. Если необходимо сохранить порядок обхода, а при использовании takeWhile() в параллельных конвейерах наблюдаются низкая производительность или чрезмерное потребление памяти, переход к последовательному выполнению с помощью BaseStream.sequential() может повысить производительность.
Требования к реализации:
Реализация по умолчанию получает spliterator этого потока, оборачивает его сплитератор для поддержки семантики этой операции при обходе и возвращает новый поток, связанный с обёрнутым сплитератором. Возвращаемый поток сохраняет характеристики выполнения этого потока (а именно параллельное или последовательное выполнение, определяемое BaseStream.isParallel()), однако обёрнутый сплитератор может не поддерживать разбиение. При закрытии возвращаемого потока вызываются обработчики закрытия как возвращаемого, так и этого потока.
Параметры:
predicate — не взаимодействующий с источником, без состояния предикат, применяемый к элементам для определения самого длинного префикса.
Возвращает:
новый поток
С версии:
9

dropWhile

default IntStream dropWhile(IntPredicate predicate)
Если поток упорядочен, возвращает поток, состоящий из оставшихся элементов этого потока после отбрасывания самого длинного префикса элементов, соответствующих заданному предикату. Если поток не упорядочен, возвращает поток, состоящий из оставшихся элементов этого потока после отбрасывания подмножества элементов, соответствующих заданному предикату.

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

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

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

Это промежуточная операция с состоянием.

Примечание к API:
Хотя dropWhile() обычно является недорогой операцией в последовательных конвейерах потоков, в упорядоченных параллельных конвейерах она может быть весьма затратной, поскольку операция должна возвращать не любой допустимый префикс, а самый длинный префикс элементов в порядке обхода. Использование неупорядоченного источника потока (например, generate(IntSupplier)) или снятие ограничения на порядок с помощью BaseStream.unordered() может значительно ускорить dropWhile() в параллельных конвейерах, если это допускает семантика вашей задачи. Если необходимо сохранить порядок обхода, а при использовании dropWhile() в параллельных конвейерах наблюдаются низкая производительность или чрезмерное потребление памяти, переход к последовательному выполнению с помощью BaseStream.sequential() может повысить производительность.
Требования к реализации:
Реализация по умолчанию получает spliterator этого потока, оборачивает его сплитератор для поддержки семантики этой операции при обходе и возвращает новый поток, связанный с обёрнутым сплитератором. Возвращаемый поток сохраняет характеристики выполнения этого потока (а именно параллельное или последовательное выполнение, определяемое BaseStream.isParallel()), однако обёрнутый сплитератор может не поддерживать разбиение. При закрытии возвращаемого потока вызываются обработчики закрытия как возвращаемого, так и этого потока.
Параметры:
predicate — не взаимодействующий с источником, без состояния предикат, применяемый к элементам для определения самого длинного префикса.
Возвращает:
новый поток
С версии:
9

forEach

void forEach(IntConsumer action)
Выполняет действие для каждого элемента этого потока.

Это терминальная операция.

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

Параметры:
action — не взаимодействующее с источником действие, выполняемое над элементами

forEachOrdered

void forEachOrdered(IntConsumer action)
Выполняет действие для каждого элемента этого потока, гарантируя обработку каждого элемента в порядке обхода для потоков с определённым порядком обхода.

Это терминальная операция.

Параметры:
action — не взаимодействующее с источником действие, выполняемое над элементами
См. также:
  • forEach(IntConsumer)

toArray

int[] toArray()
Возвращает массив, содержащий элементы этого потока.

Это терминальная операция.

Возвращает:
массив, содержащий элементы этого потока

reduce

int reduce(int identity, IntBinaryOperator op)
Выполняет над элементами этого потока сведение, используя предоставленное тождественное значение и ассоциативную функцию накопления, и возвращает полученное значение. Это эквивалентно:
    int result = identity;
    for (int element : this stream)
        result = accumulator.applyAsInt(result, element)
    return result;
, но выполнение не обязательно должно быть последовательным.

Значение identity должно быть тождественным элементом для функции-аккумулятора. Это означает, что для всех x выражение accumulator.apply(identity, x) равно x. Функция accumulator должна быть ассоциативной.

Это терминальная операция.

Примечание к API:
Сумма, минимум и максимум — частные случаи сведения, которые можно выразить с помощью этого метода. Например, сумму потока можно вычислить так:
    int sum = integers.reduce(0, (a, b) -> a+b);
или более кратко:
    int sum = integers.reduce(0, Integer::sum);

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

Параметры:
identity — тождественное значение для функции накопления
op — ассоциативная, не взаимодействующая с источником, без состояния функция для объединения двух значений
Возвращает:
результат сведения
См. также:
  • sum()
  • min()
  • max()
  • average()

reduce

OptionalInt reduce(IntBinaryOperator op)
Выполняет над элементами этого потока сведение, используя ассоциативную функцию накопления, и возвращает OptionalInt, описывающий полученное значение, если оно имеется. Это эквивалентно:
    boolean foundAny = false;
    int result = null;
    for (int element : this stream) {
        if (!foundAny) {
            foundAny = true;
            result = element;
        }
        else
            result = accumulator.applyAsInt(result, element);
    }
    return foundAny ? OptionalInt.of(result) : OptionalInt.empty();
, но выполнение не обязательно должно быть последовательным.

Функция accumulator должна быть ассоциативной.

Это терминальная операция.

Параметры:
op — ассоциативная, не взаимодействующая с источником, без состояния функция для объединения двух значений
Возвращает:
результат сведения
См. также:
  • reduce(int, IntBinaryOperator)

collect

<R> R collect(Supplier<R> supplier, ObjIntConsumer<R> accumulator, BiConsumer<R,R> combiner)
Выполняет над элементами этого потока операцию изменяемого сведения. При изменяемом сведении полученное значение представляет собой изменяемый контейнер результата, например ArrayList, а элементы добавляются посредством обновления состояния результата, а не его замены. Результат эквивалентен:
    R result = supplier.get();
    for (int element : this stream)
        accumulator.accept(result, element);
    return result;

Как и reduce(int, IntBinaryOperator), операции collect можно выполнять параллельно без дополнительной синхронизации.

Это терминальная операция.

Параметры типа:
R — тип изменяемого контейнера результата
Параметры:
supplier — функция, создающая новый изменяемый контейнер результата. При параллельном выполнении эта функция может вызываться несколько раз и каждый раз должна возвращать новое значение.
accumulator — ассоциативная, не взаимодействующая с источником, без состояния функция, которая должна добавлять элемент в контейнер результата.
combiner — ассоциативная, не взаимодействующая с источником, без состояния функция, принимающая два частичных контейнера результата и объединяющая их; она должна быть совместима с функцией-аккумулятором. Функция-комбинатор должна добавлять элементы второго контейнера результата в первый.
Возвращает:
результат сведения
См. также:
  • Stream.collect(Supplier, BiConsumer, BiConsumer)

sum

int sum()
Возвращает сумму элементов этого потока. Это частный случай сведения, эквивалентный:
    return reduce(0, Integer::sum);

Это терминальная операция.

Возвращает:
сумму элементов этого потока

min

OptionalInt min()
Возвращает OptionalInt, описывающий минимальный элемент этого потока, или пустой Optional, если поток пуст. Это частный случай сведения, эквивалентный:
    return reduce(Integer::min);

Это терминальная операция.

Возвращает:
OptionalInt, содержащий минимальный элемент этого потока, или пустой OptionalInt, если поток пуст

max

OptionalInt max()
Возвращает OptionalInt, описывающий максимальный элемент этого потока, или пустой Optional, если поток пуст. Это частный случай сведения, эквивалентный:
    return reduce(Integer::max);

Это терминальная операция.

Возвращает:
OptionalInt, содержащий максимальный элемент этого потока, или пустой OptionalInt, если поток пуст

count

long count()
Возвращает количество элементов в этом потоке. Это частный случай сведения, эквивалентный:
    return mapToLong(e -> 1L).sum();

Это терминальная операция.

Примечание к API:
Реализация может не выполнять конвейер потока (ни последовательно, ни параллельно), если способна вычислить количество элементов непосредственно по источнику потока. В таком случае исходные элементы не обходятся, а промежуточные операции не выполняются. Это может повлиять на поведенческие параметры с побочными эффектами, которые настоятельно не рекомендуются, за исключением безвредных случаев, например отладки. Рассмотрим, например, следующий поток:
    IntStream s = IntStream.of(1, 2, 3, 4);
    long count = s.peek(System.out::println).count();
Источник потока содержит известное количество элементов, а промежуточная операция peek не добавляет элементы в поток и не удаляет их из него (как это может происходить при операциях flatMap или filter). Следовательно, количество элементов равно 4, и выполнять конвейер нет необходимости; в частности, не требуется выводить элементы в качестве побочного эффекта.
Возвращает:
количество элементов в этом потоке

average

OptionalDouble average()
Возвращает OptionalDouble, описывающий среднее арифметическое элементов этого потока, или пустой Optional, если поток пуст. Это частный случай сведения.

Это терминальная операция.

Возвращает:
OptionalDouble, содержащий среднее значение элементов этого потока, или пустой Optional, если поток пуст

summaryStatistics

IntSummaryStatistics summaryStatistics()
Возвращает IntSummaryStatistics с различными сводными данными об элементах этого потока. Это частный случай сведения.

Это терминальная операция.

Возвращает:
IntSummaryStatistics с различными сводными данными об элементах этого потока

anyMatch

boolean anyMatch(IntPredicate predicate)
Возвращает значение, указывающее, соответствует ли какой-либо элемент этого потока заданному предикату. Предикат может применяться не ко всем элементам, если для определения результата это не требуется. Если поток пуст, возвращается false, а предикат не вычисляется.

Это терминальная операция с коротким замыканием.

Примечание API:
Этот метод вычисляет экзистенциальную квантификацию предиката для элементов потока (для некоторого x P(x)).
Параметры:
predicate — не мешающий выполнению, без состояния предикат, применяемый к элементам этого потока
Возвращает:
true, если какой-либо элемент потока соответствует заданному предикату; в противном случае — false

allMatch

boolean allMatch(IntPredicate predicate)
Возвращает значение, указывающее, соответствуют ли все элементы этого потока заданному предикату. Предикат может применяться не ко всем элементам, если для определения результата это не требуется. Если поток пуст, возвращается true, а предикат не вычисляется.

Это терминальная операция с коротким замыканием.

Примечание API:
Этот метод вычисляет универсальную квантификацию предиката для элементов потока (для всех x P(x)). Если поток пуст, квантификация считается выполненной тривиально и всегда равна true (независимо от P(x)).
Параметры:
predicate — не мешающий выполнению, без состояния предикат, применяемый к элементам этого потока
Возвращает:
true, если все элементы потока соответствуют заданному предикату или поток пуст; в противном случае — false

noneMatch

boolean noneMatch(IntPredicate predicate)
Возвращает значение, указывающее, что ни один элемент этого потока не соответствует заданному предикату. Предикат может применяться не ко всем элементам, если для определения результата это не требуется. Если поток пуст, возвращается true, а предикат не вычисляется.

Это терминальная операция с коротким замыканием.

Примечание API:
Этот метод вычисляет универсальную квантификацию отрицания предиката для элементов потока (для всех x ~P(x)). Если поток пуст, квантификация считается выполненной тривиально и всегда равна true независимо от P(x).
Параметры:
predicate — не мешающий выполнению, без состояния предикат, применяемый к элементам этого потока
Возвращает:
true, если ни один элемент потока не соответствует заданному предикату или поток пуст; в противном случае — false

findFirst

OptionalInt findFirst()
Возвращает OptionalInt, описывающий первый элемент этого потока, или пустой OptionalInt, если поток пуст. Если у потока нет порядка встречи, может быть возвращен любой элемент.

Это терминальная операция с коротким замыканием.

Возвращает:
OptionalInt, описывающий первый элемент этого потока, или пустой OptionalInt, если поток пуст

findAny

OptionalInt findAny()
Возвращает OptionalInt, описывающий некоторый элемент потока, или пустой OptionalInt, если поток пуст.

Это терминальная операция с коротким замыканием.

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

Возвращает:
OptionalInt, описывающий некоторый элемент этого потока, или пустой OptionalInt, если поток пуст
См. также:
  • findFirst()

asLongStream

LongStream asLongStream()
Возвращает LongStream, состоящий из элементов этого потока, преобразованных в long.

Это промежуточная операция.

Возвращает:
LongStream, состоящий из элементов этого потока, преобразованных в long

asDoubleStream

DoubleStream asDoubleStream()
Возвращает DoubleStream, состоящий из элементов этого потока, преобразованных в double.

Это промежуточная операция.

Возвращает:
DoubleStream, состоящий из элементов этого потока, преобразованных в double

boxed

Stream<Integer> boxed()
Возвращает Stream, состоящий из элементов этого потока, каждый из которых упакован в Integer.

Это промежуточная операция.

Возвращает:
Stream, состоящий из элементов этого потока, каждый из которых упакован в Integer

builder

static IntStream.Builder builder()
Возвращает построитель для IntStream.
Возвращает:
построитель потока

empty

static IntStream empty()
Возвращает пустой последовательный IntStream.
Возвращает:
пустой последовательный поток

of

static IntStream of(int t)
Возвращает последовательный IntStream, содержащий один элемент.
Параметры:
t — единственный элемент
Возвращает:
последовательный поток с одним элементом

of

static IntStream of(int... values)
Возвращает упорядоченный последовательный поток, элементы которого являются заданными значениями.
Параметры:
values — элементы нового потока
Возвращает:
новый поток

iterate

static IntStream iterate(int seed, IntUnaryOperator f)
Возвращает бесконечный упорядоченный последовательный IntStream, полученный путем итеративного применения функции f к начальному элементу seed, в результате чего создается Stream, состоящий из seed, f(seed), f(f(seed)) и т. д.

Первым элементом (позиция 0) в IntStream будет заданный seed. Для n > 0 элемент в позиции n будет результатом применения функции f к элементу в позиции n - 1.

Действие по применению f к одному элементу происходит до действия по применению f к последующим элементам. Для любого элемента действие может выполняться в любом потоке, выбранном библиотекой.

Параметры:
seed — начальный элемент
f — функция, применяемая к предыдущему элементу для получения нового элемента
Возвращает:
новый последовательный IntStream

iterate

static IntStream iterate(int seed, IntPredicate hasNext, IntUnaryOperator next)
Возвращает упорядоченный последовательный IntStream, полученный путем итеративного применения заданной функции next к начальному элементу при условии, что выполняется заданный предикат hasNext. Поток завершается, как только предикат hasNext возвращает false.

IntStream.iterate должен создавать ту же последовательность элементов, что и соответствующий цикл for:

    for (int index=seed; hasNext.test(index); index = next.applyAsInt(index)) {
        ...
    }

Полученная последовательность может быть пустой, если для начального значения не выполняется предикат hasNext. В противном случае первым элементом будет заданное значение seed, следующим элементом (если он есть) будет результат применения функции next к значению seed и так далее, пока предикат hasNext не укажет, что поток следует завершить.

Действие по применению предиката hasNext к элементу происходит до действия по применению функции next к этому элементу. Действие по применению функции next к одному элементу происходит до действия по применению предиката hasNext к последующим элементам. Для любого элемента действие может выполняться в любом потоке, выбранном библиотекой.

Параметры:
seed — начальный элемент
hasNext — предикат, применяемый к элементам для определения момента завершения потока.
next — функция, применяемая к предыдущему элементу для получения нового элемента
Возвращает:
новый последовательный IntStream
С момента:
9

generate

static IntStream generate(IntSupplier s)
Возвращает бесконечный неупорядоченный последовательный поток, каждый элемент которого создается с помощью заданного IntSupplier. Подходит для создания постоянных потоков, потоков случайных элементов и т. д.
Параметры:
s — IntSupplier для создаваемых элементов
Возвращает:
новый бесконечный неупорядоченный последовательный IntStream

range

static IntStream range(int startInclusive, int endExclusive)
Возвращает упорядоченный последовательный IntStream от startInclusive (включительно) до endExclusive (не включая) с шагом 1.
Примечание API:

Эквивалентную последовательность возрастающих значений можно получить последовательно с помощью цикла for следующим образом:

    for (int i = startInclusive; i < endExclusive ; i++) { ... }
Параметры:
startInclusive — начальное значение (включительно)
endExclusive — верхняя граница, не включаемая в диапазон
Возвращает:
последовательный IntStream для диапазона из int элементов

rangeClosed

static IntStream rangeClosed(int startInclusive, int endInclusive)
Возвращает упорядоченный последовательный IntStream от startInclusive (включительно) до endInclusive (включительно) с шагом 1.
Примечание API:

Эквивалентную последовательность возрастающих значений можно получить последовательно с помощью цикла for следующим образом:

    for (int i = startInclusive; i <= endInclusive ; i++) { ... }
Параметры:
startInclusive — начальное значение (включительно)
endInclusive — верхняя граница (включительно)
Возвращает:
последовательный IntStream для диапазона из int элементов

concat

static IntStream concat(IntStream a, IntStream b)
Создает лениво объединяемый поток, элементы которого состоят из всех элементов первого потока, за которыми следуют все элементы второго потока. Результирующий поток упорядочен, если упорядочены оба входных потока, и параллелен, если параллелен хотя бы один из входных потоков. При закрытии результирующего потока вызываются обработчики закрытия обоих входных потоков.

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

Примечание API:
Для сохранения возможностей оптимизации этот метод связывает каждый поток с его источником и принимает только два потока в качестве параметров. Например, точный размер источника объединенного потока можно вычислить, если известен точный размер источника каждого входного потока. Чтобы объединить больше потоков без связывания или вложенных вызовов этого метода, попробуйте создать поток потоков и выполнить плоское отображение с помощью тождественной функции, например:
    IntStream concat = Stream.of(s1, s2, s3, s4).flatMapToInt(s -> s);
Примечание по реализации:
Соблюдайте осторожность при создании потоков путем многократного объединения. Доступ к элементу глубоко объединенного потока может привести к длинным цепочкам вызовов или даже StackOverflowError.
Параметры:
a — первый поток
b — второй поток
Возвращает:
объединение двух входных потоков

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, включая обзоры концепций, определения терминов, способы обхода ограничений и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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/IntStream.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API