我正在编写一个 servlet,需要从请求中获取所有参数。我找到了 request.getParameterNames
返回 java.util.Enumeration
,所以我必须将代码编写为:
val names = request.getParameterNames
while(names.hasMoreElements) {
val name = names.nextElement
}
我想知道有什么方法可以转换
Enumeration
到 Seq/List
,然后我可以使用 map
方法?
最佳答案
使用 JavaConverters
见 https://stackoverflow.com/a/5184386/133106
使用包装迭代器
你可以建立一个包装器:
val nameIterator = new Iterator[SomeType] { def hasNext = names.hasMoreElements; def next = names.nextElement }
使用 JavaConversions 包装器
val nameIterator = new scala.collection.JavaConversions.JEnumerationWrapper(names)
使用 JavaConversions 隐式
如果你导入
import scala.collection.JavaConversions._
您可以隐式地进行(并且您还将获得其他 Java 集合的隐式转换)
request.getParameterNames.map(println)
使用 Iterator.continually
您可能想使用
Iterator.continually
构建迭代器就像这个答案的早期版本提出的那样:val nameIterator = Iterator.continually((names, names.nextElement)).takeWhile(_._1.hasMoreElements).map(_._2)
但这是不正确的,因为枚举器的最后一个元素将被丢弃。
原因是
hasMoreElement
调用 takeWhile
调用 nextElement
后执行在 continually
,从而丢弃最后一个值。
关于scala - 如何在Scala中将枚举转换为Seq/List?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5183730/