Scala 折叠函数检测 Seq[String] 中值的出现

问题描述 投票:0回答:1

我正在尝试编写一个 scala 函数来检测目标站点 id (targetedSiteIds) 序列中是否存在站点 id (site_id)。

如果站点 id 存在于 Seq 中,则函数 filterSiteById 返回 true,否则返回 false

但是,下面的代码一直给我错误

error: Targeting does not take type parameters

你能帮我解决这个问题吗?

提前致谢!


val site_id = "0011a522ce0f4bbbbaa6b3c38cafaa0f"

targeting = Targeting(targetedSiteIds=Seq("0009a522ce0f4bbbbaa6b3c38cafaa0f","0010a522ce0f4bbbbaa6b3c38cafaa0f","0011a522ce0f4bbbbaa6b3c38cafaa0f") // TargetedSiteIds)

case class Targeting(targetedSiteIds: Seq[String])

var trueOrFalse=filterSitesById(targeting) // true or false

def filterSitesById(sites: Targeting[Seq[String]]): Boolean = {
  sites.fold(false)(_.exists(_.idx==site_id))
}

scala akka
1个回答
0
投票
case class Targeting(targetedSiteIds: Seq[String])

val site_id = "0011a522ce0f4bbbbaa6b3c38cafaa0f"

val targeting = Targeting(targetedSiteIds = Seq("0009a522ce0f4bbbbaa6b3c38cafaa0f","0010a522ce0f4bbbbaa6b3c38cafaa0f","0011a522ce0f4bbbbaa6b3c38cafaa0f"))

def filterSitesById(sites: Targeting): Boolean = {
  sites.targetedSiteIds.exists(_ == site_id)
}

filterSitesById(targeting)
  1. 签名应该是
    def filterSitesById(sites: Targeting
    filterSitesById(sites: Seq[String]])
    ,确实没有
    Targeting[Seq[String]]
    类型
  2. 函数内部的代码也是错误的 - 如果它是
    fold
    ,那么它只会将结果组合成相同的类型(
    Seq[String]
    不能折叠成
    Boolean
    ),如果它是
    foldLeft
    那么lambda应该组合
     Boolean
    结果与
    String
    ,如果使用
    exists
    ...则不需要任何手动折叠
© www.soinside.com 2019 - 2024. All rights reserved.