Spec-Zone.ru › Scala 3.1

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

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

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

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

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 без ухудшения элементов.

Суперагрегаты
Тракт StreamExtensions
Класс Object
Тракт Matchable
Класс Any
Тип "self"
StreamConverters.type

Унаследованные классы

Исходный код
неявный класс AnyArrayHasSeqParStream[A <: AnyRef](a: Array[A])

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

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

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

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

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

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

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

Исходный код
неявный класс DoubleStreamHasToScala(stream: DoubleStream)

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

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

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

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

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

Исходный код
неявный класс IntStreamHasToScala(stream: IntStream)

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

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

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

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

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

Исходный код
неявный класс 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.1.1/scala/jdk/StreamConverters$.html

Spec-Zone.ru

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