这是我的模特课:
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
的电话号码,我该怎么做?
答案 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
(参考他的回答)