Spec-Zone.ru › Scala 3.2

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

Доступны следующие расширяющие методы:

Тип коллекции

Расширяющие методы

IterableOnce

asJavaSeqStream

IndexedSeq, массивы, BitSet, Accumulator, HashMap, HashSet, Range, TreeMap, TreeSet, Vector, строки

asJavaParStream

Map

asJavaSeqKeyStream, asJavaSeqValueStream

HashMap, TreeMap

asJavaParKeyStream, asJavaParValueStream

Stepper

asJavaSeqStream

Stepper with EfficientSplit

asJavaParStream

Строки

asJavaSeqStream, asJavaParStream, asJavaSeqCharStream, asJavaParCharStream, asJavaSeqCodePointStream, asJavaParCodePointStream

Java потоки

toScala, asJavaPrimitiveStream

Метод 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
trait StreamExtensions
class Object
trait Matchable
class Any
Self type
StreamConverters.type

Inherited classlikes

Исходный код
implicit class AnyArrayHasSeqParStream[A <: AnyRef](a: Array[A])

Inherited from StreamExtensions

Исходный код
implicit class ByteArrayHasSeqParStream(a: Array[Byte])

Inherited from StreamExtensions

Исходный код
implicit class CharArrayHasSeqParStream(a: Array[Char])

Inherited from StreamExtensions

Исходный код
implicit class DoubleArrayHasSeqParStream(a: Array[Double])

Inherited from StreamExtensions

Исходный код
implicit class DoubleStreamHasToScala(stream: DoubleStream)

Inherited from StreamExtensions

Исходный код
implicit class FloatArrayHasSeqParStream(a: Array[Float])

Inherited from StreamExtensions

Исходный код
implicit class IntArrayHasSeqParStream(a: Array[Int])

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

Исходный код
implicit class LongArrayHasSeqParStream(a: Array[Long])

Наследуется от 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

Исходный код
неявный класс ShortArrayHasSeqParStream(a: Array[Short])

Наследуется от StreamExtensions

Исходный код
неявный класс StepperHasParStream[A](stepper: Stepper[A] & EfficientSplit)

Наследуется от 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

Исходный код
конечный неявный метод ByteArrayHasSeqParStream(a: Array[Byte]): ByteArrayHasSeqParStream

Наследуется от StreamExtensions

Исходный код
конечный неявный метод CharArrayHasSeqParStream(a: Array[Char]): CharArrayHasSeqParStream

Наследуется от StreamExtensions

Исходный код
конечный неявный метод DoubleArrayHasSeqParStream(a: Array[Double]): DoubleArrayHasSeqParStream

Наследуется от StreamExtensions

Исходный код
конечный неявный метод DoubleStreamHasToScala(stream: DoubleStream): DoubleStreamHasToScala

Наследуется от StreamExtensions

Исходный код
конечный неявный метод FloatArrayHasSeqParStream(a: Array[Float]): FloatArrayHasSeqParStream

Наследуется от StreamExtensions

Исходный код
конечный неявный метод IntArrayHasSeqParStream(a: Array[Int]): IntArrayHasSeqParStream

Наследуется от StreamExtensions

Исходный код
конечный неявный метод IntStreamHasToScala(stream: IntStream): IntStreamHasToScala

Наследуется от StreamExtensions

Исходный код
конечный неявный метод IterableHasSeqStream[A](cc: IterableOnce[A]): IterableHasSeqStream[A]

Наследуется от StreamExtensions

Исходный код
конечный неявный метод IterableNonGenericHasParStream[A, C <: IterableOnce[_]](c: C)(implicit ev: C <:< IterableOnce[A]): IterableNonGenericHasParStream[A, C]

Наследуется от StreamExtensions

Источник
final implicit def LongArrayHasSeqParStream(a: Массив[Long]): LongArrayHasSeqParStream

Унаследовано от StreamExtensions

Источник
final implicit def LongStreamHasToScala(stream: LongStream): LongStreamHasToScala

Унаследовано от 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

Источник
final implicit def ShortArrayHasSeqParStream(a: Массив[Short]): ShortArrayHasSeqParStream

Унаследовано от StreamExtensions

Источник
final implicit def StepperHasParStream[A](stepper: Stepper[A] & EfficientSplit): StepperHasParStream[A]

Унаследовано от StreamExtensions

Источник
final implicit def StepperHasSeqStream[A](stepper: Stepper[A]): StepperHasSeqStream[A]

Унаследовано от StreamExtensions

Источник
final implicit def StreamHasToScala[A](stream: Stream[A]): StreamHasToScala[A]

Унаследовано от StreamExtensions

Источник
final implicit def StringHasSeqParStream(s: Строка): StringHasSeqParStream

Унаследовано от 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

Spec-Zone.ru

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