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

时间:2018-04-10 21:09:50

标签: 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=20180102","a/e/d=20180104"]

3 个答案:

答案 0 :(得分:1)

为什么不只是lst1.filter(s => lst2.exists(s.contains)) 呢?

var a:MutableList<MSetting>
var b:List<MSetting>

答案 1 :(得分:0)

您可以使用scala中的简单for循环来实现此目的,即在列表中使用映射。

请查看下面的代码以便更好地理解: -

p <- ggplot(my_dat, aes(x,y,color=m))+  
  geom_quasirandom(method = 'pseudorandom') #instead of 'smiley'

p <- ggplot_build(p)

p$data[[1]] <-   p$data[[1]] %>%
  mutate(x=case_when(
    colour=="#00BFC4" ~ PANEL + abs(PANEL - x),
    TRUE ~ PANEL - abs(PANEL - x))
  )
plot(ggplot_gtable(p))

希望这有帮助!

答案 2 :(得分:0)

您可以在第一个列表中使用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)