Spec-Zone.ru › OpenJDK 17

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

     double sum = numbers.reduce(0, (a, b) -> a+b);
 
или более кратко:

     double sum = numbers.reduce(0, Double::sum);
 

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

Parameters:
identity — начальное значение для функции накопления
op — ассоциативная, невмешивающаяся, бессостоятельная функция для объединения двух значений
Returns:
результат сведения
See Also:
  • 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 должна быть ассоциативной функцией.

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

Parameters:
op — ассоциативная, невмешивающаяся, бессостоятельная функция для объединения двух значений
Returns:
результат сведения
See Also:
  • 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 могут быть распараллелены без необходимости дополнительной синхронизации.

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

Type Parameters:
R — тип изменяемого контейнера результата
Parameters:
supplier — функция, создающая новый изменяемый контейнер результата. Для параллельного выполнения эта функция может вызываться многократно и должна возвращать новое значение каждый раз.
accumulator — ассоциативная, невмешивающаяся, бессостоятельная функция, которая должна складывать элемент в контейнер результата.
combiner — ассоциативная, невмешивающаяся, бессостоятельная функция, принимающая два частичных контейнера результата и объединяющая их, которая должна быть совместима с функцией накопления. Функция объединения должна складывать элементы из второго контейнера результата в первый контейнер результата.
Returns:
результат сведения
See Also:
  • Stream.collect(Supplier, BiConsumer, BiConsumer)

sum

double sum()
Возвращает сумму элементов в этом потоке. Суммирование — частный случай сведения. Если суммирование с плавающей запятой было бы точным, этот метод был бы эквивалентен:

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

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

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

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

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

API Note:
Элементы, отсортированные по возрастанию абсолютной величины, как правило, дают более точные результаты.
Returns:
сумма элементов в этом потоке

min

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

     return reduce(Double::min);
 

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

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

max

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

     return reduce(Double::max);
 

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

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

count

long count()
Возвращает количество элементов в этом потоке. Это частный случай сведения и эквивалентно:

     return mapToLong(e -> 1L).sum();
 

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

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

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

average

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

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

Среднее значение — это частный случай сведения.

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

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

summaryStatistics

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

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

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

anyMatch

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

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

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

allMatch

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

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

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

noneMatch

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

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

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

findFirst

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

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

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

findAny

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

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

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

boxed

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

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

Возвращает:
a 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 функции к seed значению, и так далее итеративно, пока hasNext предикат не укажет, что поток должен завершиться.

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

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

generate

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

concat

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

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

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

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

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

Spec-Zone.ru

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