我有一个简单的对象列表,每个对象都包含book_id
属性,并且我想通过book_id
字段查找该列表的元素。
答案 0 :(得分:16)
使用firstWhere方法:make queries
void main() {
final list = List<Book>.generate(10, (id) => Book(id));
Book findBook(int id) => list.firstWhere((book) => book.id == id);
print(findBook(2).name);
print(findBook(4).name);
print(findBook(6).name);
}
class Book{
final int id;
String get name => "Book$id";
Book(this.id);
}
/*
Output:
Book2
Book4
Book6
*/
答案 1 :(得分:2)
您应该添加 orElse 以避免例外:
list.firstWhere(
(book) => book.id == id,
orElse: () => null,
});
答案 2 :(得分:1)
为了避免在每次使用 orElse
时都添加 firstWhere
,使用 Dart 2.7+,您可以创建一个方便的小扩展来处理此问题:
extension IterableX<T> on Iterable<T> {
T safeFirstWhere(bool Function(T) test) {
final sublist = where(test);
return sublist.isEmpty ? null : sublist.first;
}
}
然后可以这样使用:
final books = List<Book>.generate(10, (id) => Book(id));
final matchingBooks = books.safeFirstWhere((book) => book.id == id);