Generalmente se intenta evitar esas situaciones, para empezar filtrando incluso antes de empezar:
val goodStocks = allStocks.view.
map(stock => (stock, stock.getQuote)).filter(_._2 != null).
map { case (stock, quote) => (stock,quote, quote.getPrice) }.filter(_._3 != null)
(este ejemplo que muestra cómo te llevas resultados parciales si los necesita) Utilicé una vista para que los resultados se computen según sea necesario, en lugar de crear un conjunto de colecciones nuevas en cada paso.
En realidad, probablemente tenga las comillas y esas opciones de devolución: mire en StackOverflow para ver ejemplos de cómo usarlos en lugar de valores de devolución nulos.
Pero, de todos modos, si ese tipo de cosas no funciona tan bien (por ejemplo, porque está generando demasiados resultados intermedios que debe conservar, o depende de la actualización de variables variables y desea mantener la evaluación patrón simple para que sepa lo que está sucediendo cuando) y no se puede concebir el problema de una manera diferente, posiblemente más robusto, entonces se puede
import scala.util.control.Breaks._
for (stock <- allStocks) {
breakable {
val quote = getQuote(...)
if (quoteLast eq null) break;
...
}
}
la construcción breakable
especifica dónde se rompe es ir a. Si coloca el breakable fuera de un bucle for, funciona como un corte estándar de Java. Si lo pones adentro, actúa como continue
.
Por supuesto, si tiene un número muy pequeño de condiciones, no necesita continuar; solo usa el else del enunciado if.
¿Tiene control sobre la firma del 'getQuote' y' getPrice'? si es así, puede hacer que devuelvan 'Opción [Cotizar]' y 'Opción [Precio]'. – huynhjl
Falta el resto de su "bucle". Actualmente no hace nada. – ziggystar