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

  • Need for Speed

    Need for Spe

    8 ŞUBAT 2006
  • thewinekone

    thewinekone

    17 Aralık 2005
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006