Dart ListクラスのsingleWhere()メソッドについてメモ書き。
singleWhere()は条件を満たす要素1つを返すメソッド。
第1引数で条件を判定する関数を指定。
第2引数はオプション引数「orElse:」。条件に一致しない場合の処理を記述する。第2引数で指定しない場合、StateErrorクラスを返す。
条件を満たす要素が複数ある場合はStateErrorクラスを返す。
コーディングでsingleWhere()メソッドを確認。
先ずは第1引数のみを指定。
void main() {
try {
final listTest = <String>[
"Apple",
"Orange",
"Banana",
"grape",
"Orange",
];
String res = listTest.singleWhere((element) => element == "Apple");
print(res);
} catch (e) {
print(e.toString());
}
}
実行結果。
Apple
次は条件に一致しない場合を確認。
void main() {
try {
final listTest = <String>[
"Apple",
"Orange",
"Banana",
"grape",
"Orange",
];
String res = listTest.singleWhere((element) => element == "Rice");
print(res);
} catch (e) {
print(e.toString());
}
}
実行結果。
Bad state: No element
第2引数で条件に一致しない場合の戻りを指定。
void main() {
try {
final listTest = <String>[
"Apple",
"Orange",
"Banana",
"grape",
"Orange",
];
String res = listTest.singleWhere(
(element) => element == "Rice",
orElse: () => "No Element",
);
print(res);
} catch (e) {
print(e.toString());
}
}
実行結果。
「orElse:」で指定した「No Element」が返る。
No Element
最後は条件にマッチする要素が複数ある場合。
void main() {
try {
final listTest = <String>[
"Apple",
"Orange",
"Banana",
"grape",
"Orange",
];
String res = listTest.singleWhere(
(element) => element == "Orange",
orElse: () => "No Element",
);
print(res);
} catch (e) {
print(e.toString());
}
}
実行結果。
StateErrorクラスを返す。
Bad state: Too many elements
コメント