使用Scala从Java枚举中获取对象的最佳方法是什么?我正在使用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?
提前感谢。
一个注意:如果你的函数可能实际上不是找到你正在寻找的消息ID,它应该返回Option[String]
代替。话虽如此,已经有一个从Enumeration[A]
到Scala的Iterator[A]
的隐式转换,你只需要:
import collection.JavaConversions.enumerationAsScalaIterator
之后:
mimeMessage.getAllHeaders
.find(_.getName.equalsIgnoreCase("MessageId")
.map(_.getValue)
返回Option[String]