Scala - возвращает объект класса из списка по отдельному параметру - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно возвратить один объект класса Book case из списка Books путем поиска только одного из его параметров. У меня это работает с foreach, но мне интересно, смогу ли я сделать это более элегантно.

У меня было то же самое с другими параметрами ((частичный) поиск по автору и названию), которые я использовал фильтр, чтобы возвращать новые списки со всеми соответствующими книгами, но с ISBN он мог возвращать только один объект и надеялся, что смогу сделать это а не список 1.

Я использовал foreach для циклического перебора всего списка и обновления переменной на нужную Книгу, но это выглядит грязно.

Класс выглядит так:

case class Book(title: String, author: String, ISBN: String, reference: Boolean = false)

Вот что у меня есть:

  def searchISBN(isbnSearch: String): Book = {
    var result :Book = null
    books.foreach {
      book => if(book.ISBN == isbnSearch) { result = book }
    }
    result
  }

Попытки сделать что-то вроде этого:

  def searchISBN(isbnSearch: String): Book = {
    val result = books.find(_.isbnSearch)
    result
  }

1 Ответ

3 голосов
/ 10 апреля 2019

Ваш второй подход более похож на Scala, но вы должны учитывать тот факт, что цель может быть не найдена.

def searchISBN(isbnSearch: String): Option[Book] =
  books.find(_.ISBN == isbnSearch)
...