Object StreamConverters.StreamConverters
object StreamConverters extends StreamExtensions
Этот объект предоставляет расширяющие методы для создания Java потоков (Java Streams), которые работают со структурами данных 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 поток (Stream) предоставляет операции над последовательностью элементов. Потоки создаются из 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 без упаковки элементов.
| Supertypes | |
|---|---|
| Self type |
Inherited classlikes
Исходный код
| Inherited from | StreamExtensions |
|---|
Исходный код
| Inherited from | StreamExtensions |
|---|
Исходный код
| Inherited from | StreamExtensions |
|---|
Исходный код
| Inherited from | StreamExtensions |
|---|
Исходный код
implicit class DoubleStreamHasToScala(stream: DoubleStream)
| Inherited from | StreamExtensions |
|---|
Исходный код
| Inherited from | StreamExtensions |
|---|
Исходный код
| Inherited from | StreamExtensions |
|---|
Исходный код
implicit class IntStreamHasToScala(stream: IntStream)
| Inherited from | StreamExtensions |
|---|
Исходный код
implicit class IterableHasSeqStream[A](cc: IterableOnce[A])
| Inherited from | StreamExtensions |
|---|
Исходный код
implicit class IterableNonGenericHasParStream[A, C <: IterableOnce[_]](c: C)(implicit ev: C <:< IterableOnce[A])
| Inherited from | 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.2.0/scala/jdk/StreamConverters$.html