在Dart中,Iterable是抽象类,无法直接实例化它。 可以通过创建新的列表或集合来创建新的Iterable。List和Set都是Iterable。
map的entries或values属性,可以将Map的元素读取为Iterable对象。
Iterable<int> iterable = [1, 2, 3];
int value = iterable.elementAt(1); //不能使用[],Iterable未实现,与List有区别
1、使用for-in读取元素
var iterable = ['Salad', 'Popcorn', 'Toast'];
for (var element in iterable) {
print(element);
}
print('The first element is ${iterable.first}');
print('The last element is ${iterable.last}');
2、firstWhere()
查找满足某些条件的第一个元素。 传递一个在输入满足特定条件时返回true的函数
var items = ['Salad', 'Popcorn', 'Toast', 'Lasagne'];
var element1 = items.firstWhere((element) => element.length > 5);
var element4 = items.firstWhere(
(element) => element.length > 10,
orElse: () => 'None!', //未查到值时 否则抛出StateError
);
3、singleWhere()
Iterable中只有一个元素可以满足谓词。 如果Iterable中的一个或多个元素满足谓词条件,则该方法将引发StateError异常。
items.singleWhere((element) => element.startsWith('M') && element.contains('a'));
4、条件验证
items.every((element) => element.length >= 5);//如果所有元素都满足条件,则返回true。
items.any((element) => element.contains('a')) //如果至少一个元素满足条件,则返回true。
5、过滤
//返回一个可迭代对象
var evenNumbers = numbers.where((number) => number.isEven);
如果没有元素满足where()中的谓词,则该方法返回一个空的Iterable。 与singleWhere()或firstWhere()不同,where()不会引发StateError异常。
takeWhile()返回一个Iterable,它包含导致满足谓词的元素的所有元素。
var numbers = [1, 3, -2, 0, 4, 5];
var numbersUntilZero = numbers.takeWhile((number) => number != 0);
print('Numbers until 0: $numbersUntilZero');
Numbers until 0: (1, 3, -2)
skipWhile()会在跳过满足谓词的元素之前跳过所有元素的同时返回Iterable。
var numbersAfterZero = numbers.skipWhile((number) => number != 0);
print('Numbers after 0: $numbersAfterZero');
Numbers after 0: (0, 4, 5)
6、映射
map()返回一个懒惰的Iterable,这意味着仅在元素进行迭代时才调用提供的函数。
Iterable<int> output = numbers.map((number) => number * 10);