首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将映射转换为HashMap并应用转换

将映射转换为HashMap并应用转换
EN

Stack Overflow用户
提问于 2014-12-18 01:29:02
回答 2查看 4.1K关注 0票数 2

我有一个java映射stringMap,其中键是表示日期的字符串,值是长的。我需要将这个映射转换成一个collection.mutable.HashMap[DateTime, Long],也就是说,除了更改映射的类型之外,我还需要从String转换为DateTimes。

这是我目前使用的解决方案:

代码语言:javascript
复制
import scala.collection.JavaConversions._
val df = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
val stringMap: java.util.HashMap[String, Long] = ...
val dateTimeMap = stringMap map { case (k, v) => (df.parseDateTime(k), v)}
val result = collection.mutable.HashMap[DateTime, Long](dateTimeMap.toArray:_*)

最后一行来自this post

注有一个将stringMap转换为scala的隐式转换。

问题是,有什么更好的方法吗?我试着使用一个for / map方法,但是他们返回的是一个Map而不是一个collection.mutable.HashMap编辑:很明显,突破是有效的。/EDIT

最好有一种函数式编程方法来实现这一点,而不需要临时的dateTimeMap

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-18 01:44:44

首先,建议使用JavaConverters来获得显式转换,以避免多次意外转换。

通过指定预期的结果类型,您应该能够在breakOut上使用map

代码语言:javascript
复制
import scala.collection.breakOut
import scala.collection.JavaConverters._

val stringMap: java.util.HashMap[String, Long] = new java.util.HashMap()
stringMap.put("1", 1L)
stringMap.put("2", 2L)

val result: collection.mutable.HashMap[Int, Long] = stringMap.asScala.map { case (k, v) => (k.toInt, v) }(breakOut)
// result: scala.collection.mutable.HashMap[Int,Long] = Map(2 -> 2, 1 -> 1)
票数 3
EN

Stack Overflow用户

发布于 2014-12-18 01:40:56

如果我理解你的问题,这是否可行。

代码语言:javascript
复制
  val result = collection.mutable.HashMap[DateTime, Long](stringMap.map{ case (k,v) => (df.parseDateTime(k),v)}.toArray:_* )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27537794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档