Spec-Zone.ru › OpenJDK 25

Интерфейс DoubleStream

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

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

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

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

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

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

Модификатор и тип Метод Описание
boolean allMatch(DoublePredicate predicate)
Возвращает значение, указывающее, соответствуют ли все элементы этого потока заданному предикату.
boolean anyMatch(DoublePredicate predicate)
Возвращает значение, указывающее, соответствует ли хотя бы один элемент этого потока заданному предикату.
OptionalDouble average()
Возвращает OptionalDouble, описывающий среднее арифметическое элементов этого потока, или пустой объект Optional, если поток пуст.
Stream<Double> boxed()
Возвращает Stream, состоящий из элементов этого потока, упакованных в Double.
static DoubleStream.Builder builder()
Возвращает построитель для DoubleStream.
<R> R collect(Supplier<R> supplier, ObjDoubleConsumer<R> accumulator, BiConsumer<R,R> combiner)
Выполняет операцию изменяемого сведения элементов этого потока.
static DoubleStream concat(DoubleStream a, DoubleStream b)
Создает лениво объединенный поток, элементами которого являются все элементы первого потока, за которыми следуют все элементы второго потока.
long count()
Возвращает количество элементов в этом потоке.
DoubleStream distinct()
Возвращает поток, состоящий из уникальных элементов этого потока.
default DoubleStream dropWhile(DoublePredicate predicate)
Если этот поток упорядочен, возвращает поток, состоящий из оставшихся элементов после удаления самого длинного начального фрагмента элементов, соответствующих заданному предикату.
static DoubleStream empty()
Возвращает пустой последовательный DoubleStream.
DoubleStream filter(DoublePredicate predicate)
Возвращает поток, состоящий из элементов этого потока, соответствующих заданному предикату.
OptionalDouble findAny()
Возвращает OptionalDouble, описывающий некоторый элемент потока, или пустой OptionalDouble, если поток пуст.
OptionalDouble findFirst()
Возвращает OptionalDouble, описывающий первый элемент этого потока, или пустой OptionalDouble, если поток пуст.
DoubleStream flatMap(DoubleFunction<? extends DoubleStream> mapper)
Возвращает поток, состоящий из результатов замены каждого элемента этого потока содержимым отображенного потока, полученного применением заданной функции отображения к каждому элементу.
void forEach(DoubleConsumer action)
Выполняет действие для каждого элемента этого потока.
void forEachOrdered(DoubleConsumer action)
Выполняет действие для каждого элемента этого потока, гарантируя обработку каждого элемента в порядке его появления для потоков с заданным порядком появления.
static DoubleStream generate(DoubleSupplier s)
Возвращает бесконечный неупорядоченный последовательный поток, в котором каждый элемент генерируется заданным DoubleSupplier.
static DoubleStream iterate(double seed, DoublePredicate hasNext, DoubleUnaryOperator next)
Возвращает упорядоченный последовательный DoubleStream, полученный путем многократного применения заданной функции next к начальному элементу при условии, что выполняется заданный предикат hasNext.
static DoubleStream iterate(double seed, DoubleUnaryOperator f)
Возвращает бесконечный упорядоченный последовательный DoubleStream, полученный путем многократного применения функции f к начальному элементу seed с формированием Stream, состоящего из seed, f(seed), f(f(seed)) и т. д.
DoubleStream limit(long maxSize)
Возвращает поток, состоящий из элементов этого потока, усеченный до длины не более maxSize.
DoubleStream map(DoubleUnaryOperator mapper)
Возвращает поток, состоящий из результатов применения заданной функции к элементам этого потока.
default DoubleStream mapMulti(DoubleStream.DoubleMapMultiConsumer mapper)
Возвращает поток, состоящий из результатов замены каждого элемента этого потока несколькими элементами, то есть нулем или более элементами.
IntStream mapToInt(DoubleToIntFunction mapper)
Возвращает IntStream, состоящий из результатов применения заданной функции к элементам этого потока.
LongStream mapToLong(DoubleToLongFunction mapper)
Возвращает LongStream, состоящий из результатов применения заданной функции к элементам этого потока.
<U> Stream<U> mapToObj(DoubleFunction<? extends U> mapper)
Возвращает Stream со значениями типа Object, состоящий из результатов применения заданной функции к элементам этого потока.
OptionalDouble max()
Возвращает OptionalDouble, описывающий максимальный элемент этого потока, или пустой OptionalDouble, если поток пуст.
OptionalDouble min()
Возвращает OptionalDouble, описывающий минимальный элемент этого потока, или пустой OptionalDouble, если поток пуст.
boolean noneMatch(DoublePredicate predicate)
Возвращает значение, указывающее, что ни один элемент этого потока не соответствует заданному предикату.
static DoubleStream of(double t)
Возвращает последовательный DoubleStream, содержащий один элемент.
static DoubleStream of(double... values)
Возвращает упорядоченный последовательный поток, элементами которого являются указанные значения.
DoubleStream peek(DoubleConsumer action)
Возвращает поток, состоящий из элементов этого потока и дополнительно выполняющий заданное действие для каждого элемента по мере его извлечения из результирующего потока.
double reduce(double identity, DoubleBinaryOperator op)
Выполняет сведение элементов этого потока с использованием заданного начального значения и ассоциативной функции накопления и возвращает полученное значение.
OptionalDouble reduce(DoubleBinaryOperator op)
Выполняет сведение элементов этого потока с использованием ассоциативной функции накопления и возвращает OptionalDouble, описывающий полученное значение, если оно есть.
DoubleStream skip(long n)
Возвращает поток, состоящий из оставшихся элементов после удаления первых n элементов потока.
DoubleStream sorted()
Возвращает поток, состоящий из элементов этого потока, отсортированных по порядку.
double sum()
Возвращает сумму элементов этого потока.
DoubleSummaryStatistics summaryStatistics()
Возвращает DoubleSummaryStatistics, описывающий различные сводные данные об элементах этого потока.
default DoubleStream takeWhile(DoublePredicate predicate)
Если этот поток упорядочен, возвращает поток, состоящий из самого длинного начального фрагмента его элементов, соответствующих заданному предикату.
double[] toArray()
Возвращает массив, содержащий элементы этого потока.

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

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

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

filter

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

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

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

map

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

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

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

mapToObj

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

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

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

mapToInt

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

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

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

mapToLong

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

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

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

flatMap

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

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

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

mapMulti

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

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

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

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

distinct

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

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

Возвращает:
результирующий поток

sorted

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

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

Возвращает:
результирующий поток

peek

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

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

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

Примечание API:
Этот метод существует главным образом для поддержки отладки, когда требуется наблюдать за элементами, проходящими через определенную точку конвейера:
    DoubleStream.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

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

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

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

skip

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

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

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

takeWhile

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

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

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

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

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

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

dropWhile

default DoubleStream dropWhile(DoublePredicate predicate)
Если этот поток упорядочен, возвращает поток, состоящий из оставшихся элементов этого потока после удаления самой длинной начальной последовательности элементов, соответствующих заданному предикату. В противном случае, если поток неупорядочен, возвращает поток, состоящий из оставшихся элементов этого потока после удаления подмножества элементов, соответствующих заданному предикату.

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

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

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

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

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

forEach

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

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

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

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

forEachOrdered

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

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

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

toArray

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

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

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

reduce

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

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

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

Примечание API:
Сумма, минимум, максимум и среднее — частные случаи свертки. Суммирование потока чисел можно выразить так:
    double sum = numbers.reduce(0, (a, b) -> a+b);
или, в более компактной форме:
    double sum = numbers.reduce(0, Double::sum);

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

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

reduce

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

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

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

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

collect

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

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

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

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

sum

double sum()
Возвращает сумму элементов этого потока. Суммирование — частный случай свертки. Если бы суммирование чисел с плавающей запятой было точным, этот метод был бы эквивалентен:
    return reduce(0, Double::sum);
Однако, поскольку суммирование чисел с плавающей запятой не является точным, приведенный выше код не обязательно эквивалентен суммированию, выполняемому этим методом.

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

Различные условия могут привести к вычислению бесконечной или неопределенной суммы. Это может произойти, даже если все суммируемые элементы конечны. Если хотя бы один элемент не является конечным, сумма также будет не конечной:

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

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

Примечание API:
Сортировка элементов по возрастанию абсолютной величины обычно повышает точность результата.
Возвращает:
сумму элементов этого потока

min

OptionalDouble min()
Возвращает OptionalDouble, содержащий минимальный элемент этого потока, или пустой OptionalDouble, если поток пуст. Минимальным элементом будет Double.NaN, если хотя бы один элемент потока был NaN. В отличие от операторов численного сравнения, этот метод считает отрицательный ноль строго меньше положительного нуля. Это частный случай свертки, эквивалентный:
    return reduce(Double::min);

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

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

max

OptionalDouble max()
Возвращает OptionalDouble, описывающий максимальный элемент этого потока, или пустой OptionalDouble, если поток пуст. Максимальным элементом будет Double.NaN, если какой-либо элемент потока является NaN. В отличие от операторов численного сравнения, этот метод считает отрицательный ноль строго меньше положительного нуля. Это частный случай сведения и эквивалентно:
    return reduce(Double::max);

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

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

count

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

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

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

average

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

Вычисленное среднее может незначительно различаться и иметь те же особенности поведения, что и вычисление суммы; подробности см. в разделе sum().

Среднее является частным случаем сведения.

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

Примечание к API:
Сортировка элементов по возрастанию абсолютной величины, как правило, повышает точность результата.
Возвращает:
OptionalDouble, содержащее среднее значение элементов этого потока, или пустой объект Optional, если поток пуст

summaryStatistics

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

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

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

anyMatch

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

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

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

allMatch

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

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

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

noneMatch

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

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

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

findFirst

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

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

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

findAny

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

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

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

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

boxed

Stream<Double> boxed()
Возвращает Stream, состоящий из элементов этого потока, преобразованных в объекты-обертки Double.

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

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

builder

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

empty

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

of

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

of

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

iterate

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

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

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

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

iterate

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

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

    for (double index=seed; hasNext.test(index); index = next.applyAsDouble(index)) {
        ...
    }

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

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

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

generate

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

concat

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

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

Примечание к API:
Чтобы сохранить возможности оптимизации, этот метод связывает каждый поток с его источником и принимает только два потока в качестве параметров. Например, точный размер источника конкатенированного потока можно вычислить, если известен точный размер источника каждого входного потока. Чтобы объединить больше потоков без связывания или без вложенных вызовов этого метода, попробуйте создать поток потоков и выполнить его преобразование с помощью функции тождества, например:
    DoubleStream concat = Stream.of(s1, s2, s3, s4).flatMapToDouble(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/DoubleStream.html

Spec-Zone.ru

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