Estoy escribiendo algunos códigos de Scala que usan la API Apache POI. Me gustaría iterar sobre las filas contenidas en el java.util.Iterator
que obtengo de la clase Sheet. Me gustaría utilizar el iterador en un loop de estilo for each
, por lo que he intentado convertirlo a una colección Scala nativa, pero no habrá suerte.Iteraciones sobre colecciones de Java en Scala
He examinado las características/características de la envoltura de Scala, pero no veo cómo usarlas correctamente. ¿Cómo iterar sobre una colección de Java en Scala sin usar el estilo detallado de loop de while(hasNext()) getNext()
?
Aquí está el código que escribió basándose en la respuesta correcta:
class IteratorWrapper[A](iter:java.util.Iterator[A])
{
def foreach(f: A => Unit): Unit = {
while(iter.hasNext){
f(iter.next)
}
}
}
object SpreadsheetParser extends Application
{
implicit def iteratorToWrapper[T](iter:java.util.Iterator[T]):IteratorWrapper[T] = new IteratorWrapper[T](iter)
override def main(args:Array[String]):Unit =
{
val ios = new FileInputStream("assets/data.xls")
val workbook = new HSSFWorkbook(ios)
var sheet = workbook.getSheetAt(0)
var rows = sheet.rowIterator()
for (val row <- rows){
println(row)
}
}
}
me parece que no puede incluir la línea "para (fila val <- rows) {"sin que el analizador piense que el carácter '<' es una etiqueta de cierre de XML? Los backticks no funcionan –
Debería poder convertir implícitamente a IteratirWrapper, ahorrándole un poco de sintaxis. Google para conversiones implícitas en Scala. –