Объект scala.jdk.StreamConverters
объект StreamConverters extends StreamExtensions
Этот объект предоставляет расширяющие методы для создания Java потоков, которые работают со структурами данных Scala (последовательно или параллельно). Для получения дополнительной информации о Java потоках обратитесь к документации (https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html).
При написании кода Java используйте явные методы преобразования, определённые в javaapi.StreamConverters вместо этого.
Методы asJavaSeqStream и asJavaParStream преобразуют коллекцию в Java поток:
scala> import scala.jdk.StreamConverters._ scala> val s = (1 to 10).toList.asJavaSeqStream s: java.util.stream.IntStream = java.util.stream.IntPipeline$Head@7b1e5e55 scala> s.map(_ * 2).filter(_ > 5).toScala(List) res1: List[Int] = List(6, 8, 10, 12, 14, 16, 18, 20)
Примечание: использование параллельных потоков в Scala REPL приводит к тупиковым ситуациям, см. https://github.com/scala/bug/issues/9076. В качестве обходного решения используйте scala -Yrepl-class-based.
scala> def isPrime(n: Int): Boolean = !(2 +: (3 to Math.sqrt(n).toInt by 2) exists (n % _ == 0)) isPrime: (n: Int)Boolean scala> (10000 to 1000000).asJavaParStream.filter(isPrime).toScala(Vector) res6: scala.collection.immutable.Vector[Int] = Vector(10007, 10009, 10037, 10039, ...
Java поток предоставляет операции над последовательностью элементов. Потоки создаются из Spliterator, которые похожи на итераторы с дополнительной возможностью разделения некоторых своих элементов. Это разделение, если поддерживается Spliterator, используется для распараллеливания операций потока.
Коллекции Scala имеют метод stepper, который возвращает scala.collection.Stepper для коллекции, которая, в свою очередь, может быть преобразована в Spliterator для создания Java потока.
Метод asJavaSeqStream доступен для любой коллекции Scala. Метод asJavaParStream может быть вызван только для коллекций, где возвращаемый тип метода stepper помечен маркером scala.collection.Stepper.EfficientSplit. Этот маркер добавляется к шагам, поддерживающим разделение, и, следовательно, эффективную параллельную обработку.
Доступны следующие расширяющие методы:
Тип коллекции |
Расширяющие методы |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Строки |
|
Java потоки |
|
Метод asJavaPrimitiveStream преобразует Stream[Int] в IntStream. Это дуальное значение метода boxed, определенного для примитивных потоков (например, IntStream.boxed является Stream[Integer]).
Расширяющие методы toScala для Java потоков собирают результат потоковой обработки в коллекцию Scala, например stream.toScala(List), stream.toScala(Vector). Обратите внимание, что операции преобразования в потоках ленивые (также называемые "промежуточными"), терминальные операции, такие как forEach, count или toScala запускают вычисление.
Сбор параллельного потока в коллекцию может выполняться параллельно. Это полезно, если целевая коллекция поддерживает эффективное объединение сегментов, созданных параллельно. Для поддержки этого случая стандартная библиотека Scala предоставляет коллекцию Accumulator. Эта коллекция поддерживает эффективное параллельное построение, и она имеет специализированные подтипы для Int, Long и Double, чтобы примитивные Java потоки могли быть собраны в коллекцию Scala без ухудшения элементов.
| Суперагрегаты | |
|---|---|
| Тип "self" |
Унаследованные классы
Исходный код
| Унаследованно от | StreamExtensions |
|---|
Исходный код
| Унаследованно от | StreamExtensions |
|---|
Исходный код
| Унаследованно от | StreamExtensions |
|---|
Исходный код
| Унаследованно от | StreamExtensions |
|---|
Исходный код
неявный класс DoubleStreamHasToScala(stream: DoubleStream)
| Унаследованно от | StreamExtensions |
|---|
Исходный код
| Унаследованно от | StreamExtensions |
|---|
Исходный код
| Унаследованно от | StreamExtensions |
|---|
Исходный код
неявный класс IntStreamHasToScala(stream: IntStream)
| Унаследованно от | StreamExtensions |
|---|
Исходный код
неявный класс IterableHasSeqStream[A](cc: IterableOnce[A])
| Унаследованно от | StreamExtensions |
|---|
Исходный код
неявный класс IterableNonGenericHasParStream[A, C <: IterableOnce[_]](c: C)(implicit ev: C <:< IterableOnce[A])
| Унаследованно от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
неявный класс LongStreamHasToScala(stream: LongStream)
| Наследуется от | StreamExtensions |
|---|
Исходный код
неявный класс MapHasParKeyValueStream[K, V, CC <: (MapOps)](cc: CC[K, V])
| Наследуется от | StreamExtensions |
|---|
Исходный код
неявный класс MapHasSeqKeyValueStream[K, V, CC <: (MapOps)](cc: CC[K, V])
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
неявный класс StepperHasSeqStream[A](stepper: Stepper[A])
| Наследуется от | StreamExtensions |
|---|
Исходный код
неявный класс StreamHasToScala[A](stream: Stream[A])
| Наследуется от | StreamExtensions |
|---|
Исходный код
неявный класс StringHasSeqParStream(s: String)
| Наследуется от | StreamExtensions |
|---|
Наследуемые неявные методы
Исходный код
конечный неявный метод AnyArrayHasSeqParStream[A <: AnyRef](a: Array[A]): AnyArrayHasSeqParStream[A]
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
| Наследуется от | StreamExtensions |
|---|
Исходный код
конечный неявный метод IterableNonGenericHasParStream[A, C <: IterableOnce[_]](c: C)(implicit ev: C <:< IterableOnce[A]): IterableNonGenericHasParStream[A, C]
| Наследуется от | StreamExtensions |
|---|
Источник
| Унаследовано от | StreamExtensions |
|---|
Источник
| Унаследовано от | StreamExtensions |
|---|
Источник
final implicit def MapHasParKeyValueStream[K, V, CC <: (MapOps)](cc: CC[K, V]): MapHasParKeyValueStream[K, V, CC]
| Унаследовано от | StreamExtensions |
|---|
Источник
final implicit def MapHasSeqKeyValueStream[K, V, CC <: (MapOps)](cc: CC[K, V]): MapHasSeqKeyValueStream[K, V, CC]
| Унаследовано от | StreamExtensions |
|---|
Источник
| Унаследовано от | StreamExtensions |
|---|
Источник
final implicit def StepperHasParStream[A](stepper: Stepper[A] & EfficientSplit): StepperHasParStream[A]
| Унаследовано от | StreamExtensions |
|---|
Источник
| Унаследовано от | StreamExtensions |
|---|
Источник
| Унаследовано от | StreamExtensions |
|---|
Источник
| Унаследовано от | StreamExtensions |
|---|
© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/jdk/StreamConverters$.html