相关疑难解决方法(0)

在Scala中迭代Java集合

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

我查看了Scala包装器类/特性,但我看不出如何正确使用它们.如何在不使用详细while(hasNext()) getNext()循环样式的情况下迭代Scala中的Java集合?

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

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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java collections scala scala-java-interop

111
推荐指数
7
解决办法
8万
查看次数

为什么不可变地图大小始终为零?

Scala类下面使用JDOM解析文件,并将文件中的值填充到Scala不可变Map中.+在Map上使用运算符似乎没有任何效果,因为Map始终为零.

import java.io.File
import org.jsoup.nodes.Document
import org.jsoup.Jsoup
import org.jsoup.select.Elements
import org.jsoup.nodes.Element
import scala.collection.immutable.TreeMap

class JdkElementDetail() {

  var fileLocation: String = _

  def this(fileLocation: String) = {
      this()
      this.fileLocation = fileLocation;
    }


  def parseFile : Map[String , String] = {

    val jdkElementsMap: Map[String, String] = new TreeMap[String , String];
    val input: File = new File(fileLocation);
    val doc: Document = Jsoup.parse(input, "UTF-8", "http://example.com/");
    val e: Elements = doc.getElementsByAttribute("href");

    val href: java.util.Iterator[Element] = e.iterator();
    while (href.hasNext()) {
      var objectName = href.next(); …
Run Code Online (Sandbox Code Playgroud)

scala

1
推荐指数
1
解决办法
1098
查看次数

标签 统计

scala ×2

collections ×1

java ×1

scala-java-interop ×1