在 Scala 中迭代 Java 集合 [英] Iterating over Java collections in Scala

查看:37
本文介绍了在 Scala 中迭代 Java 集合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一些使用 Apache POI API 的 Scala 代码.我想遍历我从 Sheet 类获得的 java.util.Iterator 中包含的行.我想在 for each 样式循环中使用迭代器,所以我一直试图将它转换为原生 Scala 集合,但没有成功.

I'm writing some Scala code which uses the Apache POI API. I would like to iterate over the rows contained in the java.util.Iterator that I get from the Sheet class. I would like to use the iterator in a for each style loop, so I have been trying to convert it to a native Scala collection but will no luck.

我已经查看了 Scala 包装类/特征,但我不知道如何正确使用它们.如何在不使用冗长的 while(hasNext()) getNext() 循环样式的情况下迭代 Scala 中的 Java 集合?

I have looked at the Scala wrapper classes/traits, but I can not see how to use them correctly. How do I iterate over a Java collection in Scala without using the verbose while(hasNext()) getNext() style of loop?

这是我根据正确答案编写的代码:

Here's the code I wrote based on the correct answer:

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

推荐答案

有一个包装类(scala.collection.jcl.MutableIterator.Wrapper).所以如果你定义

There is a wrapper class (scala.collection.jcl.MutableIterator.Wrapper). So if you define

implicit def javaIteratorToScalaIterator[A](it : java.util.Iterator[A]) = new Wrapper(it)

然后它将充当 Scala 迭代器的子类,因此您可以执行 foreach.

then it will act as a sub class of the Scala iterator so you can do foreach.

这篇关于在 Scala 中迭代 Java 集合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆