У меня есть список книг:
case class Book(name:String,authors:List[String])
val books:List[Book] = List(
Book(name="Code in Scala",authors=List("Viny","Vinay")),
Book(name="Dance in 30 days",authors=List("Namratha","Namitha")),
Book(name="Cook in 30 days",authors=List("Pavan")),
Book(name="Gym in 30 days",authors=List("Nisanth","Vinay"))
)
Теперь я хочу знать книги, в которых имя автора начинается с «Вин». Я реализовал это в цикле for, как показано ниже:
for(b<-books ; a <- b.authors ; if a.startsWith("Vin")) yield b.name
Но я не могу реализовать это с помощью функции более высокого порядка. Я пробовал, как показано ниже:
books flatMap (b=> b.authors.withFilter(a=>a.startsWith("Vin")).map(x=>x))
Это дает мне имя авторов, но я не могу получить доступ к объекту книги. Как я могу решить эту проблему? Основная цель здесь - преобразовать/перевести "циклы for" в функции более высокого порядка (flatmap/filter/map)