在没有代码循环的情况下从Java Enumeration获取对象的最佳方法是什么?

时间:2014-07-15 17:29:41

标签: scala loops mapreduce

使用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这样的循环?

提前感谢。

1 个答案:

答案 0 :(得分:3)

一个注意事项:如果您的功能实际上找到您正在寻找的消息ID,则应该返回Option[String]。 话虽如此,已经存在从Enumeration[A]到Scala的Iterator[A]的隐式转换,您只需要:

import collection.JavaConversions.enumerationAsScalaIterator

之后:

 mimeMessage.getAllHeaders
            .find(_.getName.equalsIgnoreCase("MessageId")
            .map(_.getValue)

将返回Option[String]