Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scala find element in nested List

Tags:

scala

Consider the following example:

case class Person(name: String, age: Int)
case class Family(surname: String, members: List[Person])

val families = List(
  Family("Jones",
    List(Person("Indiana", 50), Person("Molly", 20))),
  Family("Black",
    List(Person("Jack", 55), Person("Derek", 12))))

I want to write a function that finds a person with a certain name in a List[Family] object. This is my current solution:

def find(name: String, families: List[Family]): Option[Person] = {
  families.find(f => f.members.exists(m => m.name == name)).map(f => f.members.find(m => m.name == name).get)
}

Is there a more efficient and elegant (and functional) way to achieve this?

like image 606
tano Avatar asked Jun 04 '26 01:06

tano


2 Answers

You can try:

families.flatMap(_.members).find(_.name == name)
like image 131
Jean Logeart Avatar answered Jun 07 '26 11:06

Jean Logeart


Using a for comprehension like this,

for (f <- families; m <- f.members if m.name == name) yield m

Namely for each family member pick those whose name is as desired.

like image 34
elm Avatar answered Jun 07 '26 12:06

elm