首页 > 解决方案 > 如何查看 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 任何帮助表示感谢谢谢

标签: 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库中的集合,例如:ListVectorArraySeqSetMap等。


推荐阅读