java - 如何将 Java 列表映射转换为 Scala 列表映射
问题描述
我有一个列表的 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"));
我想将其转换为 Scala 列表映射
Map[String,List[String]]
想知道 inJava
和的转换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)
}
但结果是一个逗号分隔的值字符串。
解决方案
这是执行此操作的方法:
import 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(_.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)
// Displays
// Map(key1 -> List(k1v1, k1v2), key2 -> List(k2v1, k2v2), key3 -> List(k3v1, k3v2))
基本上,你必须在之后添加.toMap
/因为Scala 中是不可变的,这与 Java 不同。.toList
.asScala
Map
List
推荐阅读
- javascript - window.ScrollHeight 和 window.ClientHeight 在 javascript 中返回相同的值
- android - 如何在 Android 中以编程方式截屏并分享
- javascript - 如何获取有关随机智能合约地址的数据。如创建日期、链表、持有者(持有多少个钱包)
- kdb - 如何计算 KDB 中的 30 天滚动窗口?
- mysql - MySQL 查询以根据自定义列名和值获取值
- python - 如何在 selenium webdriver 中修复此错误?
- php - MySQL Query 查找所有值匹配的标记的所有订阅
- javascript - 2021 年悬停下拉菜单是否适用于移动设备?
- javascript - 试图在条形图 d3.js 中获取 y 轴标签旁边的圆圈
- list - 什么是flutter Hive相当于removeWhere?