使用Scala从Java Enumeration获取对象的最佳方法是什么?我正在使用while循环检索此值,但我想使用类似.map()的东西,并且无需编写循环即可获得此值:
private def getMsgId(mimeMessage: MimeMessage): String = {
var msgId: String = null
val iterator = enumerationAsScalaIterator(mimeMessage.getAllHeaders())
breakable {
while (iterator.hasNext) {
val header = iterator.next.asInstanceOf[Header]
if (header.getName().equalsIgnoreCase("MessageId")) {
msgId = header.getValue()
break
}
}
}
return msgId;
}
获取值“header.getValue()”的另一个选项是什么,而不使用像while或for这样的循环?
提前感谢。
答案 0 :(得分:3)
一个注意事项:如果您的功能实际上不找到您正在寻找的消息ID,则应该返回Option[String]
。
话虽如此,已经存在从Enumeration[A]
到Scala的Iterator[A]
的隐式转换,您只需要:
import collection.JavaConversions.enumerationAsScalaIterator
之后:
mimeMessage.getAllHeaders
.find(_.getName.equalsIgnoreCase("MessageId")
.map(_.getValue)
将返回Option[String]
。