Это должно делать то, что вы хотите:
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"))
Я не думаю, что у вас на самом деле есть List[Any]
для начала. Похоже, что вы испытываете пару ошибок типа, которые могут ввести вас в заблуждение. Ваш map_temp
является List[(List[String], String)]
.
Если это не так, и вы получаете map_temp
от метода, который по какой-то причине возвращает List[Any]
, если вы контролируете этот метод Вы можете изменить его, чтобы отразить фактический тип. Если вы не можете, даже если это небезопасно, вы можете попытаться разыграть его.
С небольшими изменениями вы также можете получить предметы:
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)
Вы можете поиграть с этим код здесь на Scast ie.