Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Java列表映射转换为Scala列表映射_Java_Scala - Fatal编程技术网

如何将Java列表映射转换为Scala列表映射

如何将Java列表映射转换为Scala列表映射,java,scala,Java,Scala,我有一张列表的Java地图 Map<String, List<String>> stringToListOfStrings = new HashMap<String, List<String>>(); stringToListOfStrings.put("key1", Arrays.asList("k1v1", "k1v2")); stringToListOfStrings.put("key2", Arrays.as

我有一张列表的Java地图

Map<String, List<String>> stringToListOfStrings = new HashMap<String, List<String>>();
        stringToListOfStrings.put("key1", Arrays.asList("k1v1", "k1v2"));
        stringToListOfStrings.put("key2", Arrays.asList("k2v1", "k2v2"));
        stringToListOfStrings.put("key3", Arrays.asList("k3v1", "k3v2"));
想知道
Java
Scala
中的转换

我已经试过了,但没有得到预期的结果

在Scala方面

def convertJavaToScala(stringString: java.util.HashMap[String, java.util.List[String]]) {
    val scalaMap = stringString.asScala
    scalaMap.get("key1")
    scalaMap.get("key1").foreach(println)
  }

但是,结果是一个逗号分隔的值字符串

以下是实现此操作的方法:

导入scala.collection.JavaConverters_
def convertJavaToScala(stringString:java.util.HashMap[String,java.util.List[String]]):Map[String,List[String]={
val scalaMap:Map[String,java.util.List[String]=stringString.asScala.toMap
scalaMap.mapValues(u.asScala.toList)
}
当你跑步时:

import java.util.Arrays
val stringToListOfStrings=new java.util.HashMap[String,java.util.List[String]]()
stringToListOfStrings.put(“key1”,Arrays.asList(“k1v1”,“k1v2”))
stringToListOfStrings.put(“key2”,Arrays.asList(“k2v1”,“k2v2”))
stringToListOfStrings.put(“key3”,Arrays.asList(“k3v1”,“k3v2”))
convertJavaToScala(stringToListOfStrings)
//显示
//映射(键1->List(k1v1,k1v2),键2->List(k2v1,k2v2),键3->List(k3v1,k3v2))

基本上,您必须在
.asScala
之后添加
.toMap
.toList,因为
Map
List
在Scala中是不可变的,与Java不同。

这是一种有效的转换方法:

def convertJavaToScala(ss: java.util.HashMap[String, java.util.List[String]]): Map[String, List[String]] =
  ss.asScala.map{ case (k, v) => k -> v.asScala.toList }(collection.breakOut)

使用
map
而不是
mapValues
可以避免在访问
map
的元素时重复计算转换代码。使用
collection.breakOut
意味着将直接从
Map
调用创建
immutable.Map
,因此无需在
Map
调用之前转换为
immutable.Map

I did val scalaMapConverted:Map[String,List[String]=scalaMap.mapValues(u.asScala.toList)但是我正在获取单位所需的映射[String,List[String]]我不确定您在哪个上下文中运行这个,但是如果这是您方法的最后一个语句,它确实是
Unit
,您需要返回
scalaMap
,或者不将
scalaMap.mapValues(u.asScala.toList)
分配给变量
def convertJavaToScala(ss: java.util.HashMap[String, java.util.List[String]]): Map[String, List[String]] =
  ss.asScala.map{ case (k, v) => k -> v.asScala.toList }(collection.breakOut)