从scala中的另一个字符串列表中获取所有匹配字符串的列表

从scala中的另一个字符串列表中获取所有匹配字符串的列表,scala,Scala,在Scala中,如何获取与另一个字符串中的模式之一匹配的所有字符串的列表。例如,我有两个列表 lst1=["a/b/d=20180103","a/c/d=20180201","a/c/d=20180102","a/e/d=20180104","a/b/d=20180203"] lst2 = ["20180102", "20180103", "20180104"] 现在我需要list1的交集,它匹配list2中的模式 预期产出: ["a/b/d=20180103", "a/c/d=201801

在Scala中,如何获取与另一个字符串中的模式之一匹配的所有字符串的列表。例如,我有两个列表

lst1=["a/b/d=20180103","a/c/d=20180201","a/c/d=20180102","a/e/d=20180104","a/b/d=20180203"]

lst2 = ["20180102", "20180103", "20180104"]
现在我需要
list1
的交集,它匹配
list2
中的模式

预期产出:

["a/b/d=20180103", "a/c/d=20180102","a/e/d=20180104"]

您可以在scala中使用simple for loop实现这一点,即在两个列表上都使用映射

为了更好地理解,请查看下面的代码:-

val lst1 =List("a/b/d=20180103","a/c/d=20180201","a/c/d=20180102","a/e/d=20180104","a/b/d=20180203")

val lst2 = List("20180102", "20180103", "20180104")

val ans = lst1.map { value =>
  val firstPart = value.split('=').head
  val secondPart = value.split('=').last
  if(lst2.contains(secondPart)) {
    value
  } else {
    None
  }
}

ans.filter(_ != None)

希望这有帮助

您可以在第一个列表上使用
collect
,并使用
case
部分函数,该函数保留日期子字符串位于第二个列表中的元素:

val lst1 = List("a/b/d=20180103", "a/c/d=20180201", "a/c/d=20180102", "a/e/d=20180104", "a/b/d=20180203")
val lst2 = List("20180102", "20180103", "20180104")

lst1.collect{ case s if lst2.contains(s.split("=").last) => s }
// res1: List[String] = List(a/b/d=20180103, a/c/d=20180102, a/e/d=20180104)

为什么不直接过滤它呢

lst1.filter(s => lst2.exists(s.contains))

请不要标记与您的问题无关的语言。我已尝试过此方法,并且效果良好(项目