检索满足条件的项目

时间:2018-05-25 06:42:53

标签: dart

这是我的模特课:

class Contact {
  String name;
  String email;
  int phoneNo;

  Contact(this.name, this.email, this.phoneNo);
}

假设我有以下联系人列表:

List<Contact> contacts = [
  new Contact('John', 'john@c.com', 002100),
  new Contact('Lily', 'lily@c.com', 083924),
  new Contact('Abby', 'abby@c.com', 103385),
];

我想从John contacts获取List的电话号码,我该怎么做?

2 个答案:

答案 0 :(得分:4)

如果有重复项或没有匹配的元素,

singleWhere会抛出。

另一种选择是firstWhere orElse https://api.dartlang.org/stable/1.24.3/dart-core/Iterable/firstWhere.html

var urgentCont = contacts.firstWhere((e) => e.name == 'John', orElse: () => null);
print(urgentCont?.phoneNo?.toString()?.padLeft(6, '0') ?? '(not found)');//Output: 002100

答案 1 :(得分:2)

这是我使用singleWhere

的方式
var urgentCont = contacts.singleWhere((e) => e.name == 'John');
print(urgentCont.phoneNo.toString().padLeft(6, '0'));//Output: 002100
  

singleWhere(bool test(E element)) → E返回单个元素   满足test

List class还有其他一些方法。例如where()

  

where(bool test(E element)) → Iterable<E>返回一个新的惰性Iterable   所有元素,满足谓词test

<强>更新

当没有匹配的元素(singleWheere())时,

Bad state: No element会抛出错误。如果有重复项,则会抛出Bad state: Too many elements

所以,根据@GunterZochbauer,最好的一个是firstWhere(参考他的回答)