你可以自己来建立这样的
val nameIterator = Iterator.continually((names, names.nextElement)).takeWhile(_._1.hasMoreElements).map(_._2)
Iterator.continually
执行上(names, names.nextElement)
一个通过名字调用,它在每一步返回原始枚举下一个元素。停止条件当然在takeWhile
,因为我们不需要永远传递枚举,所以我们只有值map
。
或者,你可以建立一个包装:
val nameIterator = new Iterator[SomeType] { def hasNext = names.hasMoreElements; def next = names.nextElement }
或者,最后,这是内置的方法,可能在这种情况下,使用一个:
val nameIterator = new scala.collection.JavaConversions.JEnumerationWrapper(names)
使用Implicits:
我还有一个。如果导入
import scala.collection.JavaConversions._
你可以做它含蓄地(而且你还可以得到隐式转换为其他Java collecitons)
request.getParameterNames.map(println)
,它就可以工作。
我认为第一个代码包含一个bug:它不会返回最后一个元素。为了得到它,你应该做'val nameIterator = Iterator.continually((names.hasMoreElements,names))。takeWhile(_._ 1).map(_._ 2.nextElement)' – SergGr 2017-05-04 23:12:58
请注意'JavaConversions'已被弃用。见Kevin Wright的回答。 – Kelvin 2017-09-27 21:57:05