Kri*_*oks 14 functional-programming scala
来自C/C++背景,我不太熟悉编程的功能风格,所以我的所有代码都非常必要,因为在大多数情况下我只是看不到更好的方法.
我只是想知道是否有一种方法可以使这个Scala代码块更" 实用 "?
var line:String = "";
var lines:String = "";
do {
line = reader.readLine();
lines += line;
} while (line != null)
Run Code Online (Sandbox Code Playgroud)
Kip*_*ros 27
这个怎么样?
val lines = Iterator.continually(reader.readLine()).takeWhile(_ != null).mkString
Run Code Online (Sandbox Code Playgroud)
Tom*_*icz 13
好吧,在Scala你可以说:
val lines = scala.io.Source.fromFile("file.txt").mkString
Run Code Online (Sandbox Code Playgroud)
但这只是一个库糖.请参阅阅读Scala中的整个文件?其他可能性.您实际要问的是如何将函数范例应用于此问题.这是一个提示:
Source.fromFile("file.txt").getLines().foreach {println}
Run Code Online (Sandbox Code Playgroud)
你明白这背后的想法吗?foreach文件执行println功能中的行.BTW不用担心,getLines()返回迭代器,而不是整个文件.现在更严重的事情:
lines filter {_.startsWith("ab")} map {_.toUpperCase} foreach {println}
Run Code Online (Sandbox Code Playgroud)
看到这个想法?Take lines(它可以是数组,列表,集合,迭代器,可以过滤的任何内容以及包含具有startsWith方法的项目)并且filter仅采用以"ab".开头的项目.现在map通过应用toUpperCase方法获取每个项目.最后foreach得到的项目print吧.
最后一个想法:你不仅限于一种类型.例如,假设您有一个包含整数的文件,每行一个.如果你想读取该文件,解析数字并总结它们,只需说:
lines.map(_.toInt).sum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5887 次 |
| 最近记录: |