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

  • Ampisound

    Ampisound

    12 Kasım 2006
  • jedimasterkyle

    jedimasterky

    11 ŞUBAT 2006
  • warningthepeople

    warningthepe

    21 EYLÜL 2011