我正在編寫一些使用Apache POI API的Scala代碼。我想遍歷從Sheet類獲得的java.util.Iterator
中包含的行。我想在for each
樣式循環中使用迭代器,所以我一直試圖將它轉換爲本地Scala集合,但不會運氣。在Scala中迭代Java集合
我看過Scala包裝類/特性,但我看不到如何正確使用它們。如何在不使用詳細的while(hasNext()) getNext()
循環風格的情況下遍歷Scala中的Java集合?
這是我寫的基於正確答案代碼:
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)
}
}
}
我似乎無法爲包括(VAL行線」 < - rows){「沒有解析器認爲'<'字符是XML結束標記?反引號不起作用 – 2009-01-30 17:15:54
您應該能夠隱式轉換爲IteratirWrapper,從而爲您節省一點點語法。 Google在Scala中進行隱式轉換。 – 2009-01-30 18:01:34