你可以自己來建立這樣的
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