从scala中的另一个字符串列表中获取所有匹配字符串的列表
在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
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))
请不要标记与您的问题无关的语言。我已尝试过此方法,并且效果良好(项目