Spec-Zone.ru › OpenJDK 24

Интерфейс DoubleStream

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

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

Modifier and Type Interface Description
static interface  DoubleStream.Builder
Изменяемый билдер для DoubleStream.
static interface  DoubleStream.DoubleMapMultiConsumer
Представляет операцию, принимающую аргумент типа double и DoubleConsumer, и не возвращающую результата.

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

Modifier and Type Method Description
boolean allMatch(DoublePredicate predicate)
Возвращает значение true, если все элементы потока удовлетворяют предоставленному предикату.
boolean anyMatch(DoublePredicate predicate)
Возвращает значение true, если хотя бы один элемент потока удовлетворяет предоставленному предикату.
OptionalDouble average()
Возвращает OptionalDouble, описывающую среднее арифметическое элементов потока, или пустой необязательный объект, если поток пуст.
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 объектного типа, содержащий результаты применения заданной функции к элементам этого потока.
OptionalDouble max()
Возвращает OptionalDouble, описывающий максимальный элемент этого потока, или пустой OptionalDouble, если поток пуст.
OptionalDouble min()
Возвращает OptionalDouble, описывающий минимальный элемент этого потока, или пустой OptionalDouble, если поток пуст.
boolean noneMatch(DoublePredicate predicate)
Возвращает значение true, если ни один элемент этого потока не удовлетворяет заданному предикату.
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()
Возвращает массив, содержащий элементы этого потока.

Методы, объявленные в интерфейсе java.util.stream.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 - не влияющая, бессостоятельная функция, применяемая к каждому элементу, которая производит поток новых значений
Возвращает:
новый поток
См. также:
  • 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)
Выполняет редукцию элементов этого потока, используя ассоциативную функцию накопления, и возвращает описание результирующего значения, если таковое имеется. Это эквивалентно:

     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, если этот поток пустой. Минимальный элемент будет Double.NaN, если какой-либо элемент потока был NaN. В отличие от численных операторов сравнения, этот метод рассматривает отрицательный ноль как строго меньший, чем положительный ноль. Это частный случай редукции и эквивалентно:

     return reduce(Double::min);
 

Это конечная операция.

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

max

OptionalDouble max()
Возвращает описание максимального элемента этого потока или пустой 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, и нет необходимости выполнять обработку потока и, как побочный эффект, выводить элементы.
Возвращает:
количество элементов в этом потоке
END_OF_DOCUMENT_MARKER

среднее значение

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

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

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

Это конечная операция.

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

статистические данные

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

Это конечная операция.

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

anyMatch

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

Это конечная операция с короткой цепочкой.

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

allMatch

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

Это конечная операция с короткой цепочкой.

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

noneMatch

boolean noneMatch(DoublePredicate predicate)
Возвращает, не соответствуют ли ни один элемент этого потока заданному предикату. Может не вычислять предикат для всех элементов, если это не необходимо для определения результата. Если поток пустой, то возвращается 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 для одного элемента происходит до действия применения 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 функции к предыдущему значению, и так далее итеративно, пока hasNext предикат не укажет на завершение потока.

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

Parameters:
seed - начальный элемент
hasNext - предикат, применяемый к элементам для определения момента завершения потока.
next - функция, применяемая к предыдущему элементу для получения нового элемента
Returns:
новый последовательный DoubleStream
Since:
9

generate

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

concat

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

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

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

     DoubleStream concat = Stream.of(s1, s2, s3, s4).flatMapToDouble(s -> s);
 
Implementation Note:
Будьте осторожны при построении потоков из повторной конкатенации. Доступ к элементу глубоко конкатенированного потока может привести к глубоким цепочкам вызовов или даже StackOverflowError.
Parameters:
a - первый поток
b - второй поток
Returns:
конкатенация двух входных потоков

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/stream/DoubleStream.html

Spec-Zone.ru

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