Spec-Zone.ru › OpenJDK 21

Интерфейс 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

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

Модификатор и тип Интерфейс Описание
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 со значениями типа объект, содержащий результаты применения данной функции к элементам этого потока.
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()
Возвращает массив, содержащий элементы этого потока.

Методы, объявленные в интерфейсе 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 - функция, применяемая к каждому элементу, которая генерирует 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, содержащий минимальный элемент этого потока, или пустой необязательный элемент, если поток пуст

max

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

     return reduce(Double::max);
 

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

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

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

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

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

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

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

summaryStatistics

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

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

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

anyMatch

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

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

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

allMatch

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

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

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

noneMatch

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

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

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

findFirst

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

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

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

findAny

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

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

Returns:
a OptionalDouble описывающую какой-либо элемент этого потока, или пустой OptionalDouble , если поток пуст
See Also:
  • findFirst()

boxed

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

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

Returns:
a Stream содержащий элементы этого потока, каждый упакованный в Double

builder

static DoubleStream.Builder builder()
Возвращает билдер для DoubleStream.
Returns:
a stream builder

empty

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

of

static DoubleStream of(double t)
Возвращает последовательный DoubleStream , содержащий один элемент.
Parameters:
t - единственный элемент
Returns:
a singleton sequential stream

of

static DoubleStream of(double... values)
Возвращает упорядоченный последовательный поток, элементами которого являются указанные значения.
Parameters:
values - элементы нового потока
Returns:
the new stream

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

Parameters:
seed - начальный элемент
f - функция, применяемая к предыдущему элементу для получения нового элемента
Returns:
a new sequential stream

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 к элементу предшествует действию применения функции next к этому элементу. Действие применения функции next для одного элемента предшествует действию применения предиката hasNext для последующих элементов. Для любого заданного элемента действие может выполняться в любом потоке, который выбирает библиотека.

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

generate

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

concat

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

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

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

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

© 1993, 2023, 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/21/docs/api/java.base/java/util/stream/DoubleStream.html

Spec-Zone.ru

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