gpt4 book ai didi

scala - 如何将 java Map 转换为 LinkedHashMap[String,ArrayList[String]] 类型的 scala Map?

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

从 Java API 我得到

java.util.LinkedHashMap[String,java.util.ArrayList[String]]

然后我需要将其作为参数传递给 scala 程序

val rmap = Foo.baz(parameter)

该参数是scala类型:

Map[String,List[String]]

那么我怎样才能轻松转换

java.util.LinkedHashMap[String,java.util.ArrayList[String]]

Map[String,List[String]]

我尝试使用 import scala.collection.JavaConversions._ 但在我的情况下这不起作用(或者至少我猜是这样),因为 scala 代码位于模板函数中,我只能放置 import scala.collection.JavaConversions ._ 函数内部。模板函数如下:

def someFunc(param: java.util.LinkedHashMap[String,java.util.ArrayList[String]]) = {
import scala.collection.JavaConversions._
val rmap = Foo.baz(param) // param is of scala type Map[String,List[String]]
.......

现在 scala 不会自动将 java 类型转换为 scala 类型。

这是我得到的编译器错误:引发的错误是:类型不匹配;找到:java.util.LinkedHashMap[String,java.util.ArrayList[String]] 必需:Map[String,List[String]]

最佳答案

你有两个问题:scala 中的 Map 和 List 与 java 版本不同。

scala.collection.JavaConversions.mapAsScalaMap 创建一个可变映射,因此使用可变映射可以实现以下效果:

import scala.collection.JavaConversions._
import scala.collection.mutable.Map

val f = new java.util.LinkedHashMap[String, java.util.ArrayList[String]]
var g: Map[String, java.util.ArrayList[String]] = f

ArrayList 有点难。作品如下:

import scala.collection.JavaConversions._
import scala.collection.mutable.Buffer

val a = new java.util.ArrayList[String]
var b: Buffer[String] = a

但是如果我们尝试

import scala.collection.JavaConversions._
import scala.collection.mutable.Map
import scala.collection.mutable.Buffer

val f = new java.util.LinkedHashMap[String, java.util.ArrayList[String]]
var g: Map[String, Buffer[String]] = f

这不起作用。您最好的选择是为此自行定义显式隐式转换。

关于scala - 如何将 java Map 转换为 LinkedHashMap[String,ArrayList[String]] 类型的 scala Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6573414/

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