SORU
30 Ocak 2009, Cuma


Yineleme Java koleksiyonları üzerinde Scala içinde

Apache POI API kullanan bazı Scala kod yazıyorum. Satırları Sayfasını sınıfı aldığım java.util.Iterator içerdiği ispat etmek istiyorum. Yerel Scala koleksiyonu dönüştürmek için çalışıyorum yani 3 ** tarzı bir döngü yineleyici kullanmak istiyorum ama şans yok.

Scala sarıcı sınıflar/nitelikler baktım, ama bunları doğru şekilde kullanmak için nasıl göremiyorum. Nasıl ayrıntılı döngü while(hasNext()) getNext() stil kullanmadan Scala Java bir koleksiyon üzerinde yineleme mı?

İşte doğru cevap dayanarak yazdığım kodu:

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)
        }
    }
}

CEVAP
26 EKİM 2009, PAZARTESİ


2.8, tüm yapmanız gereken, Scala olarak zaten uygun dönüşüm beyan ettiği JavaConversions nesne, almak.

import scala.collection.JavaConversions._

Bu önceki sürümleri, ama işe yaramaz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • FND Films

    FND Films

    2 Mayıs 2006
  • ImBluecams

    ImBluecams

    25 Kasım 2012