首页 > 解决方案 > 按类列表过滤scala案例类列表?

问题描述

case class在 Scala 中有以下内容:

case class Profile(userId: String, items: Map[String, Seq[Item]], subParts: Seq[SubPartAndCount], usedItems: Map[String, Long])

SubPartandCount看起来像这样:

case class SubPartAndCount(subPart: String, subCount: Int)

所以我想通过 s 列表中的案例类中Profile的值过滤s 列表。我一直试图解决这个问题,但没有成功!任何帮助将非常感激!subPartSubPartAndCountsubPart

标签: scala

解决方案


使用.exists(A => Boolean)嵌套在 a 中.filter(B => Boolean)

profileList.filter(_.subParts.exists(_.subPart == "Part A"))

这是一个例子:

type Item = String

case class Profile(userId: String, items: Map[String, Seq[Item]], subParts: Seq[SubPartAndCount], usedItems: Map[String, Long])

case class SubPartAndCount(subPart: String, subCount: Int)

val subPartA = SubPartAndCount("Part A", 100)
val subPartB = SubPartAndCount("Part B", 200)

val exampleItems = Map("Hello" -> Seq("World", "Galaxy", "Universe"))
val exampleUsedItems = Map("Hello" -> 1L, "Goodbye" -> 2L)

val profileList = Seq(
  Profile("good", exampleItems, Seq(subPartA, subPartB), exampleUsedItems),
  Profile("bad", exampleItems, Seq(subPartB, subPartB), exampleUsedItems),
  Profile("good", exampleItems, Seq(subPartB, subPartA), exampleUsedItems)
)

profileList.filter(_.subParts.exists(_.subPart == "Part A"))

试试看!

该语句计算为Seq两个“好”中Profile的一个。

希望这可以帮助。


推荐阅读