Spec-Zone.ru › Scala 2.13 Library

Объект 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 Stream предоставляет операции над последовательностью элементов. Потоки создаются из Spliterator, которые похожи на итераторы с дополнительной возможностью разделить часть своих элементов. Это разделение, если оно поддерживается Spliterator, используется для распараллеливания операций потока.

В коллекциях Scala есть метод stepper, который возвращает scala.collection.Stepper для коллекции, которая, в свою очередь, может быть преобразована в Spliterator для создания потока Java.

Метод asJavaSeqStream доступен для любых коллекций Scala. Метод asJavaParStream может быть вызван только для коллекций, где возвращаемый тип метода stepper помечен маркером scala.collection.Stepper.EfficientSplit. Этот маркер добавляется к степерам, которые поддерживают разделение, а значит, эффективную параллельную обработку.

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

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

Методы расширения

IterableOnce

asJavaSeqStream

IndexedSeq, Arrays, 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 без упаковывания элементов.

Источник
StreamConverters.scala
Линейные супертипы
StreamExtensions, AnyRef, Any

Члены типа

implicit class AnyArrayHasSeqParStream[A <: AnyRef] extends AnyRef

Определяющие классы
StreamExtensions

implicit class ByteArrayHasSeqParStream extends AnyRef

Определяющие классы
StreamExtensions

implicit class CharArrayHasSeqParStream extends AnyRef

Определяющие классы
StreamExtensions

implicit class DoubleArrayHasSeqParStream extends AnyRef

Определяющие классы
StreamExtensions

implicit class DoubleStreamHasToScala extends AnyRef

Определяющие классы
StreamExtensions

implicit class FloatArrayHasSeqParStream extends AnyRef

Определяющие классы
StreamExtensions

implicit class IntArrayHasSeqParStream extends AnyRef

Определяющие классы
StreamExtensions

implicit class IntStreamHasToScala extends AnyRef

Определяющие классы
StreamExtensions

implicit class IterableHasSeqStream[A] extends AnyRef

Определяющие классы
StreamExtensions

implicit class IterableNonGenericHasParStream[A, C <: IterableOnce[_]] extends AnyRef

Определяющие классы
StreamExtensions

implicit class LongArrayHasSeqParStream extends AnyRef

Определяющие классы
StreamExtensions

implicit class LongStreamHasToScala extends AnyRef

Определяющие классы
StreamExtensions

implicit class MapHasParKeyValueStream[K, V, CC[X, Y] <: MapOps[X, Y, Map, _]] extends AnyRef

Определяющие классы
StreamExtensions

явное класс MapHasSeqKeyValueStream[K, V, CC[X, Y] <: MapOps[X, Y, Map, _]] extends AnyRef

Определение классов
StreamExtensions

явное класс ShortArrayHasSeqParStream extends AnyRef

Определение классов
StreamExtensions

явное класс StepperHasParStream[A] extends AnyRef

Определение классов
StreamExtensions

явное класс StepperHasSeqStream[A] extends AnyRef

Определение классов
StreamExtensions

явное класс StreamHasToScala[A] extends AnyRef

Определение классов
StreamExtensions

явное класс StringHasSeqParStream extends AnyRef

Определение классов
StreamExtensions

Члены-значения

final def !=(arg0: Any): Boolean

Проверка двух объектов на неравенство.

returns

true если !(this == that), в противном случае false.

Definition Classes
AnyRef → Any

final def ##(): Int

Эквивалентно x.hashCode, за исключением упакованных числовых типов и null. Для числовых типов возвращает значение хеш-кода, соответствующее равенству значений: если два объекта типа значения сравниваются как true, то ## вернёт одно и то же значение хеш-кода для каждого из них. Для null возвращает хеш-код, где null.hashCode вызывает NullPointerException.

returns

значение хеш-кода, соответствующее ==

Definition Classes
AnyRef → Any

final def ==(arg0: Any): Boolean

Выражение x == that эквивалентно if (x eq null) that eq null else x.equals(that).

returns

true если объект-приёмник эквивалентен аргументу; false в противном случае.

Definition Classes
AnyRef → Any

final def asInstanceOf[T0]: T0

Приводит объект-приёмник к типу T0.

Обратите внимание, что успех приведения типов во время выполнения зависит от семантики стирания Scala. Поэтому выражение 1.asInstanceOf[String] выбросит ClassCastException во время выполнения, в то время как выражение List(1).asInstanceOf[List[String]] — нет. В последнем примере, из-за стирания аргумента типа во время компиляции невозможно проверить, соответствуют ли элементы списка нужному типу.

returns

объект-приёмник.

Definition Classes
Any
Исключения

ClassCastException, если объект-приёмник не является экземпляром стирания типа T0.

def clone(): AnyRef

Создаёт копию объекта-приёмника.

По умолчанию реализация метода clone зависит от платформы.

returns

копия объекта-приёмника.

Атрибуты
protected[java.lang]
Definition Classes
AnyRef
Аннотации
@throws(classOf[java.lang.CloneNotSupportedException]) @native()
Примечание

не специфицировано SLS в качестве члена AnyRef

final def eq(arg0: AnyRef): Boolean

Проверяет, является ли аргумент (that) ссылкой на объект-приёмник (this).

Метод eq реализует отношение эквивалентности на не-нулевых экземплярах AnyRef, и имеет три дополнительных свойства:

    Он согласован: для любых не-нулевых экземпляров x и y типа AnyRef, многократные вызовы x.eq(y) последовательно возвращают true или последовательно возвращают false. Для любого не-нулевого экземпляра x типа AnyRef, вызовы x.eq(null) и null.eq(x) возвращают false. null.eq(null) возвращает true.

При переопределении методов equals или hashCode важно обеспечить согласованность их поведения с равенством ссылок. Поэтому, если два объекта являются ссылками друг на друга (o1 eq o2), они должны быть равны друг другу (o1 == o2) и должны иметь одинаковый хеш-код (o1.hashCode == o2.hashCode).

returns

true если аргумент является ссылкой на объект-приёмник; false в противном случае.

Definition Classes
AnyRef

def equals(arg0: AnyRef): Boolean

Метод равенства для ссылочных типов. По умолчанию делегирует вызов eq.

См. также equals в scala.Any.

returns

true если объект-приёмник эквивалентен аргументу; false в противном случае.

Definition Classes
AnyRef → Any

def finalize(): Unit

Вызывается сборщиком мусора для объекта-приёмника, когда больше нет ссылок на объект.

Детали того, когда и если вызывается метод finalize, а также взаимодействие между finalize и нелокальными возвратами и исключениями, зависят от платформы.

Атрибуты
protected[java.lang]
Definition Classes
AnyRef
Аннотации
@throws(classOf[java.lang.Throwable])
Примечание

не специфицировано SLS в качестве члена AnyRef

final def getClass(): Class[_ <: AnyRef]

Возвращает представление класса объекта во время выполнения.

returns

объект класса, соответствующий типу объекта во время выполнения.

Definition Classes
AnyRef → Any
Аннотации
@native()

def hashCode(): Int

Метод hashCode для ссылочных типов. См. hashCode в scala.Any.

возвращает

значение хэш-кода для этого объекта.

Классы определений
AnyRef → Any
Аннотации
@native()

final def isInstanceOf[T0]: Boolean

Проверка, является ли динамический тип объекта-получателя T0.

Обратите внимание, что результат теста зависит от семантики стирания Scala. Поэтому выражение 1.isInstanceOf[String] вернет false, а выражение List(1).isInstanceOf[List[String]] вернет true. В последнем примере, поскольку аргумент типа стирается во время компиляции, невозможно проверить, относятся ли элементы списка к указанному типу.

возвращает

true если объект-получатель является экземпляром стираемого типа T0; false в противном случае.

Классы определений
Any

final def ne(arg0: AnyRef): Boolean

Эквивалентно !(this eq that).

возвращает

true если аргумент не является ссылкой на объект-получатель; false в противном случае.

Классы определений
AnyRef

final def notify(): Unit

Разбуживает один поток, ожидающий монитор объекта-получателя.

Классы определений
AnyRef
Аннотации
@native()
Примечание

не указано в SLS как член AnyRef

final def notifyAll(): Unit

Разбуживает все потоки, ожидающие монитор объекта-получателя.

Классы определений
AnyRef
Аннотации
@native()
Примечание

не указано в SLS как член AnyRef

final def synchronized[T0](arg0: => T0): T0

Классы определений
AnyRef

def toString(): String

Создаёт строковое представление этого объекта. По умолчанию представление зависит от платформы. На платформе Java это конкатенация имени класса, "@" и хэш-кода объекта в шестнадцатеричном формате.

возвращает

строковое представление объекта.

Классы определений
AnyRef → Any

final def wait(): Unit

Классы определений
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long, arg1: Int): Unit

Классы определений
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException])

final def wait(arg0: Long): Unit

Классы определений
AnyRef
Аннотации
@throws(classOf[java.lang.InterruptedException]) @native()

© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala/jdk/StreamConverters$.html

Spec-Zone.ru

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