【发布时间】:2016-07-12 21:50:51
【问题描述】:
作为将 Java 代码转换为 Scala 代码的工作的一部分,我需要将 Java 流 Files.walk(Paths.get(ROOT)) 转换为 Scala。我无法通过谷歌搜索找到解决方案。 asScala 不会这样做。有什么提示吗?
相关代码如下:
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;
// ...snip...
Files.walk(Paths.get(ROOT))
.filter(path -> !path.equals(Paths.get(ROOT)))
.map(path -> Paths.get(ROOT).relativize(path))
.map(path -> linkTo(methodOn(FileUploadController.class).getFile(path.toString())).withRel(path.toString()))
.collect(Collectors.toList()))
Files.walk(Paths.get(ROOT)) 在 Java 中的返回类型是 Stream<Path>。
【问题讨论】:
-
您真正需要什么?在2.12中,您可以
stream.filter(x => something)。 -
@som-snytt 在应用 Scala 代码之前,我需要先转换 Java 流类型。
-
因此,按照我的示例,您可以向 Java API 提供 Scala 函数文字。
-
对于我们这些来自未来的人,从 Scala 2.13+ 开始,您可以使用
import scala.jdk.StreamConverters._; yourJavaStream.toScala(LazyList)
标签: scala java-8 scala-java-interop