如何在飞镖列表中查找元素

时间:2020-01-26 16:22:30

标签: dart

我有一个简单的对象列表,每个对象都包含book_id属性,并且我想通过book_id字段查找该列表的元素。

3 个答案:

答案 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);