用法:
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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。