将java.util.stream.stream转换为Scala流

将java.util.stream.stream转换为Scala流,scala,collections,scala-collections,Scala,Collections,Scala Collections,我知道如何使用Java库,我可以编写一些循环来完成我需要的工作,但问题更多,为什么scala.collection.JavaConverters或scala.collection.javaconversations中没有任何东西可以将java.util.stream.stream转换为scala.collection.immutable.stream 我想这样做: def streamFiles(path: Path): Stream[Path] = { Files.newDirecto

我知道如何使用Java库,我可以编写一些循环来完成我需要的工作,但问题更多,为什么
scala.collection.JavaConverters
scala.collection.javaconversations
中没有任何东西可以将
java.util.stream.stream
转换为
scala.collection.immutable.stream

我想这样做:

def streamFiles(path: Path): Stream[Path] = {
    Files.newDirectoryStream(path).asScala
}
def streamFiles(path: Path): Stream[Path] = {
  val path_it : java.util.Iterator[Path] = Files.newDirectoryStream(path).iterator()
  def loop(it: java.util.Iterator[Path]): Stream[Path] =
    if( it.hasNext )
     it.next #:: loop(it)
    else
      Stream()
  loop(path_it)
}
但我必须写下这样的东西:

def streamFiles(path: Path): Stream[Path] = {
    Files.newDirectoryStream(path).asScala
}
def streamFiles(path: Path): Stream[Path] = {
  val path_it : java.util.Iterator[Path] = Files.newDirectoryStream(path).iterator()
  def loop(it: java.util.Iterator[Path]): Stream[Path] =
    if( it.hasNext )
     it.next #:: loop(it)
    else
      Stream()
  loop(path_it)
}

由于路线图上的差异,当前版本的
JavaConverters
JavaConversions
不提供Java流和Scala流之间的转换

Java 8是引入的版本,Scala 2.11.0是。因此,没有时间改变Scala2.11计划,添加与Java8特性更好的集成。事实上,Scala2.12计划更好地支持Java8(请参见和)

但无论如何,有“一个针对Scala的Java8兼容性工具包”,也有

看看您的代码,有一个相关的问题:返回一个,它不是
java.util.stream.stream
的子接口,而是一个。因此,您需要的是一种将
Iterable
转换为Scala
流的方法,如果这是您真正想要的,您的代码应该是:

import java.nio.file.Path
import java.nio.file.Files

import scala.collection.JavaConverters._

object Foo {
  def streamFiles(path: Path): Stream[Path] = {
    Files.newDirectoryStream(path).iterator().asScala.toStream
  }
}
但是,如果您仍然希望将
java.util.stream.stream
转换为Scala stream,请将版本0.8.0-RC3或更高版本添加到您的项目中(您可能需要),然后执行以下操作:

import scala.compat.java8.StreamConverters._

val numbers: java.util.List[Int] = java.util.Arrays.asList(1, 2, 3)
numbers.stream().toScala[Stream]

你的问题不清楚。哪个流(Java8或Scala)?这里有什么问题?您已经尝试过做什么了?将Java8流转换为Scala流。所以两者都是。我以为这会很清楚,但事实并非如此。请重写你的问题,最好用一些与你想要实现的目标相关的代码。@marcospereira我添加了一些代码。我希望你现在对它非常满意,并且很高兴能给我一个好的答案。因为其他用户可能也需要这样的信息。