List 如何使用Scala检查元素是否存在于列表[任何]中

List 如何使用Scala检查元素是否存在于列表[任何]中,list,scala,contains,List,Scala,Contains,我的清单如下: val map_temp = List( (List("SRC_123","SRC_999"),"TRGT_123"), (List("SRC_456"),"TRGT_456"), (List("SRC_789"),"TRGT_789"), (List("SRC_888"),"TRGT_888"), ) map_temp.foreach { case(key, value) => if (key.contains("SR

我的清单如下:

val map_temp =
  List(
    (List("SRC_123","SRC_999"),"TRGT_123"),
    (List("SRC_456"),"TRGT_456"),
    (List("SRC_789"),"TRGT_789"),
    (List("SRC_888"),"TRGT_888"),
  )
map_temp.foreach {
  case(key, value) =>
    if (key.contains("SRC_999")) {
      print("yes exists")
    }
}
我想检查其中是否存在SRC_999

我尝试了以下方法:

val map_temp =
  List(
    (List("SRC_123","SRC_999"),"TRGT_123"),
    (List("SRC_456"),"TRGT_456"),
    (List("SRC_789"),"TRGT_789"),
    (List("SRC_888"),"TRGT_888"),
  )
map_temp.foreach {
  case(key, value) =>
    if (key.contains("SRC_999")) {
      print("yes exists")
    }
}
这会导致以下错误

error: value contains is not a member of Any
case(key:Any, value) => if(key.contains("SRC_99"))
我也试过:

map_temp.foreach(a => if(a._1.contains("SRC_999")))
但这会导致以下错误:

error: value contains is not a member of Any
mapped.foreach(a => print(a._1.contains("SRC_999")))
我怎样才能解决这个问题

我怎样才能解决这个问题

没有一个列表[任何]


通过有一个列表[Any],您明确地告诉Scala元素可以是任何东西。这意味着Scala对元素一无所知。它甚至不知道它们是否有contains方法。例如,元素可以是整数,但没有contains方法。

这应该满足您的要求:

val map_temp =
  List(
    (List("SRC_123","SRC_999"),"TRGT_123"),
    (List("SRC_456"),"TRGT_456"),
    (List("SRC_789"),"TRGT_789"),
    (List("SRC_888"),"TRGT_888"),
  )

def exists[A](input: List[(List[A], _)], what: A): Boolean =
  input.exists(_._1.contains(what))

// should be found
assert(exists(map_temp, "SRC_999"))
assert(exists(map_temp, "SRC_888"))

// should not be found
assert(!exists(map_temp, "SRC_998"))
assert(!exists(map_temp, "TRGT_123"))
我不认为你真的有一个清单[任何]开始。您似乎遇到了一些类型错误,这些错误可能会误导您。你的地图是一个列表[列表[字符串],字符串]

如果情况并非如此,并且您从一个出于某种原因返回列表[Any]的方法中获取map_temp,如果您控制该方法,则可以更改它以反映实际类型。如果你不能,即使它不安全,你也可以试着投下它

只需少量更改,您还可以检索项目:

def find[A, B](input: List[(List[A], B)], what: A): Option[B] =
  input.find(_._1.contains(what)).map(_._2)

// should be found
assert(find(map_temp, "SRC_999") == Some("TRGT_123"))
assert(find(map_temp, "SRC_888") == Some("TRGT_888"))

// should not be found
assert(find(map_temp, "SRC_998") == None)
assert(find(map_temp, "TRGT_123") == None)
您可以使用此代码。

映射临时值是List[List[String],String],而不是List[Any]。您可以像下面这样检查要查找的元素:

map_temp.exists(_._1.contains("SRC_999"))

我也尝试过这个方法map_temp.map_.asInstanceOf[String,String].map_temp.foreacha=>如果a.。_1.containsSRC_999{printyes Exits}结果:java.lang.ClassCastException:scala.collection.immutable.$colon$colon不能转换为java.lang.StringHi stefanobaghino,我得到的是列表[Any],如下所示。var r=List.range0,inst.charMapping.length var srcChars1=r.map{i=>if1==1 inst.charMappingi.srcChars.get else i}var tgtChar1=r.map{i=>if1==1 inst.charMappingi.tgtChar.get else i}map_temp=srcChars1 zip tchar1如何将其作为List[List[String],String]获取?因此,我假设if条件中的1==1是其他内容的占位符,因为他们当然会评估为真。如果您可以删除它们,我建议您这样做。如果不能,请考虑if表达式返回的类型必须是两个分支的超级类型。e、 g if true 4 else 4的类型与Int类型的4和String类型的4最接近,后者恰好是任意类型。删除if或确保两个分支都返回srcChars1的List[String]和tgtChar1的字符串。对于您编写的函数,如果SRC_999退出,是否有方法从List[List[String],String]中获取唯一的字符串值