如何将 scala fs2 流转换为字符串?
how to convert scala fs2 stream to string?
我想知道如何将 Scala fs2 Stream 转换为字符串,来自 fs2 github 自述文件示例:
def converter[F[_]](implicit F: Sync[F]): F[Unit] = {
val path = "/Users/lorancechen/version_control_project/_unlimited-works/git-server/src/test/resources"
io.file.readAll[F](Paths.get(s"$path/fs.txt"), 4096)
.through(text.utf8Decode)
.through(text.lines)
.filter(s => !s.trim.isEmpty && !s.startsWith("//"))
.map(line => fahrenheitToCelsius(line.toDouble).toString)
.intersperse("\n")
.through(text.utf8Encode)
.through(io.file.writeAll(Paths.get(s"$path/fs-output.txt")))
.compile.drain
}
// at the end of the universe...
val u: Unit = converter[IO].unsafeRunSync()
如何将结果输出到字符串而不是另一个文件?
如果您想要获取流中的所有 String
个元素 运行,您可以使用 runFold
实现它。一个简单的例子:
def converter[F[_]](implicit F: Sync[F]): F[List[String]] = {
val path = "/Users/lorancechen/version_control_project/_unlimited-works/git-server/src/test/resources"
io.file.readAll[F](Paths.get(s"$path/fs.txt"), 4096)
.through(text.utf8Decode)
.through(text.lines)
.filter(s => !s.trim.isEmpty && !s.startsWith("//"))
.runFold(List.empty[String]) { case (acc, str) => str :: acc }
}
然后:
val list: List[String] = converter[IO].unsafeRunSync()
如果您有 Stream[F, String]
,您可以调用 .compile.string
将您的流转换为 F[String]
。
val s: Stream[IO, String] = ???
val io: IO[String] = s.compile.string
val str: String = io.unsafeRunSync()
我想知道如何将 Scala fs2 Stream 转换为字符串,来自 fs2 github 自述文件示例:
def converter[F[_]](implicit F: Sync[F]): F[Unit] = {
val path = "/Users/lorancechen/version_control_project/_unlimited-works/git-server/src/test/resources"
io.file.readAll[F](Paths.get(s"$path/fs.txt"), 4096)
.through(text.utf8Decode)
.through(text.lines)
.filter(s => !s.trim.isEmpty && !s.startsWith("//"))
.map(line => fahrenheitToCelsius(line.toDouble).toString)
.intersperse("\n")
.through(text.utf8Encode)
.through(io.file.writeAll(Paths.get(s"$path/fs-output.txt")))
.compile.drain
}
// at the end of the universe...
val u: Unit = converter[IO].unsafeRunSync()
如何将结果输出到字符串而不是另一个文件?
如果您想要获取流中的所有 String
个元素 运行,您可以使用 runFold
实现它。一个简单的例子:
def converter[F[_]](implicit F: Sync[F]): F[List[String]] = {
val path = "/Users/lorancechen/version_control_project/_unlimited-works/git-server/src/test/resources"
io.file.readAll[F](Paths.get(s"$path/fs.txt"), 4096)
.through(text.utf8Decode)
.through(text.lines)
.filter(s => !s.trim.isEmpty && !s.startsWith("//"))
.runFold(List.empty[String]) { case (acc, str) => str :: acc }
}
然后:
val list: List[String] = converter[IO].unsafeRunSync()
如果您有 Stream[F, String]
,您可以调用 .compile.string
将您的流转换为 F[String]
。
val s: Stream[IO, String] = ???
val io: IO[String] = s.compile.string
val str: String = io.unsafeRunSync()