用法:
object StreamConverters extends StreamExtensions
此对象提供扩展方法来创建对 Scala 集合进行操作的Java Streams(顺序或并行).有关 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 提供对一系列元素的操作。流是从 Spliterators 创建的,它与迭代器类似,具有将其某些元素分区的附加函数。如果 Spliterator 支持,此分区用于并行化 Stream 操作。
Scala 集合有一个方法 stepper
,它为集合返回一个scala.collection.Stepper,然后可以将其转换为用于创建Java Stream 的Spliterator。
asJavaSeqStream
扩展方法适用于任何 Scala 集合。 asJavaParStream
扩展方法只能在 stepper
方法的返回类型用 scala.collection.Stepper.EfficientSplit 标记特征标记的集合上调用。这个特性被添加到支持分区的步进器中,因此可以进行高效的并行处理。
可以使用以下扩展方法:
集合类型 | 扩展方法 |
---|---|
| |
| |
|
|
|
|
| |
| |
Strings |
|
Java 流 |
|
asJavaPrimitiveStream
方法将 Stream[Int]
转换为 IntStream
。它是在原始流上定义的 boxed
方法的对偶(例如,IntStream.boxed
是 Stream[Integer]
)。
Java 流上的 toScala
扩展方法将流管道的结果收集到 Scala 集合中,例如 stream.toScala(List)
、 stream.toScala(Vector)
。请注意,流上的转换操作是惰性的(也称为 "intermediate"),诸如 forEach
、 count
或 toScala
之类的终端操作会触发评估。
将并行流收集到集合中可以并行执行。如果目标集合支持并行构建的段的有效合并,这将是有益的。为了支持这个用例,Scala 标准库提供了Accumulator 集合。该集合支持高效的并行构造,并且它具有 Int
、 Long
和 Double
的专用子类型,因此可以将原始 Java 流收集到 Scala 集合中而无需对元素进行装箱。
相关用法
- Scala jdk.Accumulator用法及代码示例
- Scala jdk.OptionConverters用法及代码示例
- Scala jdk.CollectionConverters用法及代码示例
- Scala jdk.FunctionConverters用法及代码示例
- Scala javaapi.CollectionConverters用法及代码示例
- Scala Tabulate.sliding用法及代码示例
- Scala ArrayBuffer.inits用法及代码示例
- Scala long.BitwiseOr用法及代码示例
- Scala StringBuilder.partitionMap用法及代码示例
- Scala List distinct()用法及代码示例
- Scala DefaultMap.sizeIs用法及代码示例
- Scala StrictOptimizedIterableOps.sliding用法及代码示例
- Scala Searching.SearchResult用法及代码示例
- Scala ::.collectFirst用法及代码示例
- Scala TreeSet diff()用法及代码示例
- Scala Char getClass()用法及代码示例
- Scala int.Min用法及代码示例
- Scala IntMap.groupMap用法及代码示例
- Scala Map3.mkString用法及代码示例
- Scala IterableOnceOps.flatMap用法及代码示例
- Scala IndexedSeqOps.lengthIs用法及代码示例
- Scala Map3.addString用法及代码示例
- Scala WrappedString.scanRight用法及代码示例
- Scala String compareToIgnoreCase()用法及代码示例
- Scala List drop()用法及代码示例
注:本文由纯净天空筛选整理自scala-lang.org大神的英文原创作品 jdk.StreamConverters。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。