noa*_*hlz 2 scala lazy-evaluation
鉴于此功能,我无法修改:
def numbers(c: Char): Iterator[Int] =
if(Character.isDigit(c)) Iterator(Integer.parseInt(c.toString))
else Iterator.empty
// numbers: (c: Char)Iterator[Int]
Run Code Online (Sandbox Code Playgroud)
而这个输入数据:
val data = List('a','b','c','1','d','&','*','x','9')
// data: List[Char] = List(a, b, c, 1, d, &, *, x, 9)
Run Code Online (Sandbox Code Playgroud)
我怎样才能使这个函数变得懒惰,这样data只会处理到第一个出现的数字字符?
def firstNumber(data: List[Char]) :Int = data.flatMap(numbers).take(1)
Run Code Online (Sandbox Code Playgroud)
data.iterator.flatMap(numbers).take(1).toList
Run Code Online (Sandbox Code Playgroud)
不要使用溪流; 您不需要存储旧数据.不要使用观点; 他们没有得到精心维护,无论如何都是矫枉过正的.
如果你想要一个Int,你需要一些默认行为.根据具体情况,您可以选择
data.iterator.flatMap(numbers).take(1).headOption.getOrElse(0)
Run Code Online (Sandbox Code Playgroud)
或类似的东西
{
val ns = data.iterator.flatMap(numbers)
if (ns.hasNext) ns.next
else throw new NoSuchElementException("Number missing")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2120 次 |
| 最近记录: |