Интерфейс 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 | Изменяемый билдер для |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | allMatch(DoublePredicate predicate) | Возвращает значение, указывающее, соответствуют ли все элементы этого потока предоставленному предикату. |
boolean | anyMatch(DoublePredicate predicate) | Возвращает значение, указывающее, соответствует ли хотя бы один элемент этого потока предоставленному предикату. |
OptionalDouble | average() | Возвращает |
Stream<Double> | boxed() | Возвращает |
static DoubleStream.Builder | builder() | Возвращает билдер для |
<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 | filter(DoublePredicate predicate) | Возвращает поток, состоящий из элементов этого потока, которые соответствуют заданному предикату. |
OptionalDouble | findAny() | Возвращает |
OptionalDouble | findFirst() | Возвращает |
DoubleStream | flatMap(DoubleFunction<? extends DoubleStream> mapper) | Возвращает поток, состоящий из результатов замены каждого элемента этого потока содержимым отображаемого потока, созданного при применении предоставленной функции отображения к каждому элементу. |
void | forEach(DoubleConsumer action) | Выполняет действие для каждого элемента этого потока. |
void | forEachOrdered(DoubleConsumer action) | Выполняет действие для каждого элемента этого потока, гарантируя, что каждый элемент обрабатывается в порядке встречи для потоков, у которых определён порядок встречи. |
static DoubleStream | generate(DoubleSupplier s) | Возвращает бесконечный последовательный неупорядоченный поток, где каждый элемент генерируется предоставленной |
static DoubleStream | iterate(double seed,
DoublePredicate hasNext,
DoubleUnaryOperator next) | Возвращает упорядоченный последовательный |
static DoubleStream | iterate(double seed,
DoubleUnaryOperator f) | Возвращает бесконечный последовательный упорядоченный |
DoubleStream | limit(long maxSize) | Возвращает поток, состоящий из элементов этого потока, усечённых так, чтобы не превышать |
DoubleStream | map(DoubleUnaryOperator mapper) | Возвращает поток, состоящий из результатов применения данной функции к элементам этого потока. |
IntStream | mapToInt(DoubleToIntFunction mapper) | Возвращает |
LongStream | mapToLong(DoubleToLongFunction mapper) | Возвращает |
<U> Stream<U> | mapToObj(DoubleFunction<? extends U> mapper) | Возвращает потоковый объект |
OptionalDouble | max() | Возвращает |
OptionalDouble | min() | Возвращает |
boolean | noneMatch(DoublePredicate predicate) | Возвращает значение, указывающее, не соответствует ли ни один элемент этого потока предоставленному предикату. |
static DoubleStream | of(double t) | Возвращает последовательный |
static DoubleStream | of(double... values) | Возвращает последовательный упорядоченный поток, элементы которого — указанные значения. |
DoubleStream | peek(DoubleConsumer action) | Возвращает поток, состоящий из элементов этого потока, дополнительно выполняющий предоставленное действие над каждым элементом по мере потребления элементов из результирующего потока. |
double | reduce(double identity,
DoubleBinaryOperator op) | Выполняет операцию сведения над элементами этого потока, используя предоставленное значение тождества и функцию аккумуляции, ассоциативную с точки зрения операций, и возвращает результирующее значение. |
OptionalDouble | reduce(DoubleBinaryOperator op) | Выполняет операцию сведения над элементами этого потока, используя ассоциативную функцию аккумуляции, и возвращает |
DoubleStream | skip(long n) | Возвращает поток, состоящий из оставшихся элементов этого потока после отбрасывания первых |
DoubleStream | sorted() | Возвращает поток, состоящий из элементов этого потока в отсортированном порядке. |
double | sum() | Возвращает сумму элементов в этом потоке. |
DoubleSummaryStatistics | summaryStatistics() | Возвращает |
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)
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)
сумма
double sum()
Возвращает сумму элементов в этом потоке. Суммирование — это частный случай сокращения. Если бы суммирование с плавающей точкой было точным, этот метод был бы эквивалентен:
return reduce(0, Double::sum);Однако, поскольку суммирование с плавающей точкой не является точным, код выше не обязательно эквивалентен вычислению суммы этим методом.
Значение суммы с плавающей точкой зависит как от входных значений, так и от порядка операций сложения. Порядок операций сложения в этом методе намеренно не определён, чтобы позволить гибкость реализации для повышения скорости и точности вычисляемого результата. В частности, этот метод может быть реализован с использованием компенсированного суммирования или другого метода для уменьшения погрешности в числовой сумме по сравнению с простым суммированием double значений. Из-за неопределённого порядка операций и возможности использования различных схем суммирования выходной результат этого метода может изменяться при одних и тех же входных элементах.
Различные условия могут привести к вычислению бесконечной суммы. Это может произойти даже если все суммируемые элементы конечны. Если какой-либо элемент является бесконечным, сумма будет бесконечной:
- Если какой-либо элемент — NaN, то окончательная сумма будет NaN.
- Если элементы содержат одну или несколько бесконечностей, сумма будет бесконечной или NaN.
- Если элементы содержат бесконечности разных знаков, сумма будет NaN.
- Если элементы содержат бесконечности одного знака, а промежуточная сумма переполняется в бесконечность противоположного знака, сумма может быть NaN.
Это конечная операция.
- Примечание API:
- Элементы, отсортированные по возрастанию абсолютного значения, как правило, дают более точные результаты.
- Возвращает:
- сумму элементов в этом потоке
min
OptionalDouble min()
Возвращает OptionalDouble, описывающую минимальный элемент этого потока, или пустой OptionalDouble, если этот поток пуст. Минимальный элемент будет Double.NaN , если какой-либо элемент потока был NaN. В отличие от числовых операторов сравнения, этот метод считает отрицательный ноль строго меньше положительного нуля. Это частный случай сокращения и эквивалентен:
return reduce(Double::min);
Это конечная операция.
- Возвращает:
OptionalDouble, содержащий минимальный элемент этого потока, или пустой Optional, если поток пуст
max
OptionalDouble max()
Возвращает OptionalDouble , описывающую максимальный элемент этого потока, или пустой OptionalDouble, если этот поток пуст. Максимальный элемент будет Double.NaN , если какой-либо элемент потока был NaN. В отличие от числовых операторов сравнения, этот метод считает отрицательный ноль строго меньше положительного нуля. Это частный случай сокращения и эквивалентен:
return reduce(Double::max);
Это конечная операция.
- Возвращает:
OptionalDouble, содержащий максимальный элемент этого потока, или пустой Optional, если поток пуст
количество
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, и нет необходимости выполнять обработку потока и, как побочный эффект, выводить элементы. - Возвращает:
- количество элементов в этом потоке
среднее
OptionalDouble average()
Возвращает OptionalDouble , описывающую среднее арифметическое элементов этого потока, или пустой Optional, если этот поток пуст.
Вычисляемое среднее может изменяться численно и иметь особенности поведения, как при вычислении суммы; см. sum() для подробностей.
Среднее — это частный случай сокращения.
Это конечная операция.
- Примечание API:
- Элементы, отсортированные по возрастанию абсолютного значения, как правило, дают более точные результаты.
- Возвращает:
OptionalDouble, содержащий среднее значение элемента этого потока, или пустой Optional, если поток пуст
статистики
DoubleSummaryStatistics summaryStatistics()
Возвращает DoubleSummaryStatistics , описывающие различные статистические данные об элементах этого потока. Это частный случай сокращения.
Это конечная операция.
- Возвращает:
DoubleSummaryStatistics, описывающие различные статистические данные об элементах этого потока
любой_соответствует
boolean anyMatch(DoublePredicate predicate)
Возвращает, соответствует ли какой-либо элемент этого потока предоставленному предикату. Может не оценивать предикат для всех элементов, если это не нужно для определения результата. Если поток пуст, то false возвращается, и предикат не оценивается.
- Примечание API:
- Этот метод оценивает экзистенциальную квантификацию предиката по элементам потока (для некоторого x P(x)).
- Параметры:
-
predicate- не влияющий, бессостоятельный предикат, применяемый к элементам этого потока - Возвращает:
-
true, если какие-либо элементы потока соответствуют предоставленному предикату, в противном случаеfalse
все_соответствуют
boolean allMatch(DoublePredicate predicate)
Возвращает, соответствуют ли все элементы этого потока предоставленному предикату. Может не оценивать предикат для всех элементов, если это не нужно для определения результата. Если поток пуст, то true возвращается, и предикат не оценивается.
- Примечание API:
- Этот метод оценивает универсальную квантификацию предиката по элементам потока (для всех x P(x)). Если поток пуст, квантификация считается вакуумно удовлетворяемой и всегда
true(независимо от P(x)). - Параметры:
-
predicate- не влияющий, бессостоятельный предикат, применяемый к элементам этого потока - Возвращает:
-
true, если все элементы потока соответствуют предоставленному предикату или поток пуст, в противном случаеfalse
ни_один_не_соответствует
boolean noneMatch(DoublePredicate predicate)
Возвращает, не соответствует ли ни один элемент этого потока предоставленному предикату. Может не оценивать предикат для всех элементов, если это не нужно для определения результата. Если поток пуст, то true возвращается, и предикат не оценивается.
- Примечание API:
- Этот метод оценивает универсальную квантификацию отрицания предиката по элементам потока (для всех x ~P(x)). Если поток пуст, квантификация считается вакуумно удовлетворяемой и всегда
true, независимо от P(x). - Параметры:
-
predicate- не влияющий, бессостоятельный предикат, применяемый к элементам этого потока - Возвращает:
-
true, если ни один элемент потока не соответствует предоставленному предикату или поток пуст, в противном случаеfalse
найти_первый
OptionalDouble findFirst()
Возвращает OptionalDouble, описывающую первый элемент этого потока, или пустой OptionalDouble , если поток пуст. Если у потока нет порядка встречи, то может быть возвращён любой элемент.
- Возвращает:
OptionalDouble, описывающую первый элемент этого потока, или пустойOptionalDouble, если поток пуст
найти_любой
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 к значению seed, и так далее итеративно, пока предикат hasNext не укажет на завершение потока.
Действие применения предиката hasNext к элементу происходит раньше действия применения функции next к этому элементу. Действие применения функции next к одному элементу происходит раньше действия применения предиката hasNext к последующим элементам. Для любого данного элемента действие может быть выполнено в любом потоке, выбранном библиотекой.
- Параметры:
-
seed- начальный элемент -
hasNext- предикат для определения, когда поток должен завершиться. -
next- функция, применяемая к предыдущему элементу для получения нового элемента - Возвращает:
- новый последовательный
DoubleStream - С:
- 9
generate
static DoubleStream generate(DoubleSupplier s)
Возвращает бесконечный неупорядоченный последовательный поток, где каждый элемент генерируется предоставленным DoubleSupplier. Это подходит для генерации постоянных потоков, потоков случайных элементов и т. д.
- Параметры:
-
s- поставщикDoubleSupplierдля генерируемых элементов - Возвращает:
- новый бесконечный неупорядоченный последовательный
DoubleStream
concat
static DoubleStream concat(DoubleStream a,
DoubleStream b) Создает лениво конкатенированный поток, элементами которого являются все элементы первого потока, за которыми следуют все элементы второго потока. Результирующий поток является упорядоченным, если оба входных потока упорядочены, и параллельным, если любой из входных потоков является параллельным. При закрытии результирующего потока вызываются обработчики закрытия для обоих входных потоков.
Этот метод работает с двумя входными потоками и связывает каждый поток с его источником. В результате последующие изменения источника входного потока могут не отражаться в результирующем конкатенированном потоке.
- Примечание API:
- Для сохранения возможностей оптимизации этот метод связывает каждый поток с его источником и принимает только два потока в качестве параметров. Например, точный размер источника конкатенированного потока можно вычислить, если известен точный размер источника каждого входного потока. Чтобы конкатенировать больше потоков без привязки или без вложенных вызовов этого метода, попробуйте создать поток потоков и выполнить flat-mapping с функцией identity, например:
DoubleStream concat = Stream.of(s1, s2, s3, s4).flatMapToDouble(s -> s);
- Примечание реализации:
- Будьте осторожны при построении потоков из многократной конкатенации. Обращение к элементу глубоко конкатенированного потока может привести к глубоким цепочкам вызовов или даже к
StackOverflowError. - Параметры:
-
a- первый поток -
b- второй поток - Возвращает:
- конкатенацию двух входных потоков
© 1993, 2020, 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/11/docs/api/java.base/java/util/stream/DoubleStream.html