一般尽量避免这些情况通过过滤先跟你甚至开始之前:
val goodStocks = allStocks.view.
map(stock => (stock, stock.getQuote)).filter(_._2 != null).
map { case (stock, quote) => (stock,quote, quote.getPrice) }.filter(_._3 != null)
(这个例子显示你如何沿部分结果进行,如果你需要他们)。我使用了一个视图,以便根据需要计算结果,而不是在每个步骤创建一堆新的集合。
实际上,您可能会有引号和返回选项 - 在StackOverflow中查看如何使用这些代替空返回值的示例。但是,无论如何,如果这种事情不能很好地发挥作用(例如,因为你产生了太多的中间结果,你需要保留,或者你依赖更新可变变量,并且你想保持评估图案简单,所以你知道发生了什么的时候),你不能在一个不同的,可能更健壮的方式受孕的问题,那么你可以
import scala.util.control.Breaks._
for (stock <- allStocks) {
breakable {
val quote = getQuote(...)
if (quoteLast eq null) break;
...
}
}
的breakable
结构指定地方休息应该带你去。如果你在for循环之外放置breakable,它就像一个标准的Java风格的break。如果你把它放在里面,它就像continue
一样。
当然,如果你有很少的条件,你根本不需要继续;只需使用if语句的else。
你有控制getQuote'和'签名' getPrice'?如果是的话,你可以让他们返回'Option [Quote]'和'Option [Price]'。 – huynhjl
你的“循环”的其余部分缺失。目前它什么都不做。 – ziggystar