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

  • nemoking of kinges

    nemoking of

    4 EYLÜL 2009
  • NYLON Video

    NYLON Video

    11 Aralık 2006
  • thelonelyisland

    thelonelyisl

    23 Aralık 2005