我需要通过仅搜索其参数之一来从“图书”列表中返回单个Book case类对象。我让它与foreach一起工作,但想知道是否可以更优雅地完成它。
我对其他参数((部分)作者和标题搜索)具有相同的条件,我曾使用过滤器返回包含所有匹配书籍的新列表,但对于ISBN,它只能返回一个对象,并希望我能做到这一点而不是1的列表。
我已经使用了foreach来遍历整个列表,并使用所需的Book更新var,但是感觉很混乱。
该类如下:
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
}
答案 0 :(得分:2)
您的第二种方法更像Scala式的,但您必须考虑到可能找不到目标的事实。
def searchISBN(isbnSearch: String): Option[Book] =
books.find(_.ISBN == isbnSearch)