gpt4 book ai didi

scala - 在 Scala 中使用 java Map

转载 作者:行者123 更新时间:2023-12-01 06:52:01 25 4
gpt4 key购买 nike

我对 Scala REPL 中的这种行为感到非常困惑:

scala> import java.util.Map
import java.util.Map

scala> import java.util.HashMap
import java.util.HashMap

scala> val jMap:java.util.Map[String,Int]=new HashMap[String,Int]("first"->1,"second" -> 2)

<console>:12: error: type mismatch;
found : (String, Int)
required: Float
val jMap =new HashMap[String,Int]("first"->1,"second" -> 2)
^
<console>:12: error: type mismatch;
found : (String, Int)
required: Float
val jMap=new HashMap[String,Int]("first"->1,"second" -> 2)
^

有人可以帮助解释这里发生了什么吗?

最佳答案

java.util.HashMap 不提供通过传递 (K, V) 的可变参数来构造映射的功能,但是有一个接受 initialCapacity: IntloadFactor: Float 的双参数构造函数,这就是为什么您会收到有关需要 Float 的编译错误的原因。
(针对 Scala 2.13+ 更新)Scala 中的惯用方法是仅使用 Scala 不可变映射(无需导入):

val map = Map("first" -> 1, "second" -> 2).asJava
如果您的 Scala 代码使用返回 java.util.Map 的 Java 库,您可以使用 scala.jdk.CollectionConverters 将其显式转换为 Scala 映射,如下所示:
import scala.jdk.CollectionConverters._

val javaMap: java.util.Map[String, String] = // ...
val map = javaMap.asScala

// or vice versa if you need to pass it into the Java API

val javaMap = Map("first" -> 1, "second" -> 2).asJava
请注意, asScala 只是底层 Java 映射的包装器(因此,如果该映射是可变的,则包装的映射也将是可变的)并且是 scala.collection.Map 的实例。为了完全符合习惯并从 Scala 的不变性保证中受益,您可能需要在末尾添加另一个 .toMap 将其转换为 scala.collection.immutable.Map(这是默认 Map)。
如果您使用 scala 2.12 或更早版本,请使用 scala.jdk.CollectionConverters._ import scala.collection.JavaConverters._ 代替。

关于scala - 在 Scala 中使用 java Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37829536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com