【问题标题】:What's the new way to iterate over a Java Map in Scala 2.8.0?在 Scala 2.8.0 中迭代 Java Map 的新方法是什么?
【发布时间】:2011-02-12 03:10:57
【问题描述】:

scala.collection.JavaConversions 如何取代 Stack Overflow 问题 Iterating over Java collections in Scala 中给出的答案(它不起作用,因为“jcl”包已经消失)和 Iterating over Map with Scala(在复杂的测试中它对我不起作用,我将尝试归结并稍后在此处发布)。

后者实际上是一个 Scala Map 问题,但我认为我需要知道两个答案才能遍历 java.util.Map

【问题讨论】:

    标签: scala language-features scala-2.8


    【解决方案1】:

    在 2.8 中,您导入 scala.collection.JavaConversions._ 并用作 Scala 映射。这是一个示例(在 2.8.0.RC1 中):

    scala> val jmap:java.util.Map[String,String] = new java.util.HashMap[String,String]  
    jmap: java.util.Map[String,String] = {}
    
    scala> jmap.put("Hi","there")
    res0: String = null
    
    scala> jmap.put("So","long")
    res1: String = null
    
    scala> jmap.put("Never","mind")
    res2: String = null
    
    scala> import scala.collection.JavaConversions._
    import scala.collection.JavaConversions._
    
    scala> jmap.foreach(kv => println(kv._1 + " -> " + kv._2))
    Hi -> there
    Never -> mind
    So -> long
    
    scala> jmap.keys.map(_.toUpperCase).foreach(println)
    HI
    NEVER
    SO
    

    如果您特别想要一个 Scala 迭代器,请使用 jmap.iterator(在转换导入之后)。

    【讨论】:

    • 哇,这是一个很棒的无痛解决方案!
    • 应该有一种不用转换为scala map的方法,对吧?如果我们在循环中迭代 java map 会更好,它将避免不必要的对象创建。获取“找到:(String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]”错误。
    • @ZxcvMnb - 这些天你应该使用JavaConverters 并明确更改它们;随着 Java 8 添加了 foreach 方法,您不能再对 foreach 使用隐式转换。
    猜你喜欢
    • 2018-12-01
    • 2018-12-19
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 2011-04-10
    • 2020-07-18
    • 2012-08-09
    • 1970-01-01
    相关资源
    最近更新 更多