scala - 如何查看 Array 是否包含 Scala 中另一个 Java List 的值?
问题描述
我有 1 个包含字符串的 Scala 数组和 1 个包含字符串的 Java Util 列表。我想检查一个数组的值是否在另一个列表中,并相应地设置一个标志。
def getFlag(JavaList, scalaArray): Boolean = {
val res = JavaList.toArray.filter(x => scalaArray.contains(x))
if (res.isEmpty)
false
else
true
}
包含似乎没有工作。即使应该有匹配的字符串,它也总是将大小显示为 0,我不知道为什么。
我将如何解决这个问题,或者还有其他更好的方法吗?我正在尝试更熟悉 Scala 任何帮助表示感谢谢谢
解决方案
我会使用exists
并将Array转换为Set以加快检查速度。
// This one for 2.13+
import scala.jdk.CollectionConverters._
// This one for 2.12-
import scala.collection.JavaConverters._
def getFlag(javaList: java.util.List[String], scalaArray: Array[String]): Boolean = {
val values = scalaArray.toSet
javaList.asScala.exists(values.contains)
}
如果你得到 a false
,那么字符串中有一些错误,可以尝试将它们转换为小写或检查其中是否有不可见的字符。
我正在尝试更熟悉 Scala 任何帮助表示感谢谢谢
我最好的建议是尽量远离Java集合和普通Arrays
的 . 相反,请使用Scala库中的集合,例如:List
、Vector
、ArraySeq
、Set
、Map
等。
推荐阅读
- spring-boot - 通过 SSL 连接时如何配置 HermesJMS 以使用特定的客户端证书?
- sql - Postgresql 查询 - Posgresql 中日期时间字段的平均时间?
- docker - docker-compose up 运行 network_mode=host 服务失败
- excel - 如何将带有事件的按钮/文本框添加到 Excel 表单
- firebase - Allow users from different collection see a different stream
- python - 使用 Python SDK 将 azure blob 复制到 azure 文件共享
- php - 如何找出 json_encode 失败的原因(PHP)?
- linux - sed- 在模式前后插入文本
- svelte - 从没有工兵的子文件夹提供的苗条应用程序
- git - Jest - 查找相关测试并在 `pre-commit` Hook 上运行它们