gpt4 book ai didi

java - 如何有效地与 Scala 中的 Java 流交互?

转载 作者:行者123 更新时间:2023-12-01 10:33:34 25 4
gpt4 key购买 nike

我的代码是这样开始的:

val paths: Array[Path] = ...
val filePaths: Array[java.util.stream.Stream[Path]] = paths.map(Files.walk(_))

我希望“filePaths”的类型为 Array[Path]。 (任何 Scala 集合都可以工作)。但从现在起,我无法再取得任何进一步的进展。我尝试过 JavaConversions、flatMap、reduce、collect 和 java.util.stream.Stream#toArray 的各种组合,但总是会导致一些模糊的类型错误。

此外,如果不仅能看到解决方案,还能深入了解为什么这看起来比应有的困难得多,那就太好了。例如为什么不

import scala.collection.JavaConversions._
...
paths.flatMap(Files.walk(_))
//or
paths.flatMap(Files.walk(_).collect(Collectors.toList))

工作? (IDE 错误为:“预期:(Path) => GenTraversableOnce[NotInferedB],实际:(Path) => Any”)

最佳答案

import scala.collection.JavaConverters._
paths.flatMap(Files.walk(_).collect(Collectors.toList[Path]).asScala)

你走在正确的道路上,toList只需要一个类型。

请注意,您应该更喜欢 JavaConverters 而不是 JavaConversions,因为它更具可读性。

如果你使用-Xexperimental,你也可以使用java api

Arrays.stream(paths).flatMap(Files.walk(_)).collect(Collectors.toList[Path]).asScala

关于java - 如何有效地与 Scala 中的 Java 流交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34949628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com