Iterable迭代器
-
Iterable.empty()
创建空Iterable。const factory Iterable.empty() = EmptyIterable<E>;
-
factory Iterable.generate(int count, [E generator(int index)])
创建一个Iterable,通过序列来动态生成元素。index从0开始 - first 返回第一个函数,如果Iterable为空,则会报错
-
isEmpty
如果this没有元素,则返回true。 -
isNotEmpty
如果集合中至少有一个元素,返回true。 -
iterator
返回Iterator,被允许迭代Iterable的所有元素。 -
last
返回最后一个元素。 -
length
返回this对象中元素的数量。 -
single
如果可迭代对象仅有一个元素,返回那个元素。否则报错 -
any
bool any(bool test(E element))
检查可迭代对象是否有任何一个元素满足test。如果有返回true,否则返回false -
cast
Iterable<R> cast<R>() => Iterable.castFrom<E, R>(this);
将Iterable中对象的类型转为其父类,R必须为Iterable中对象的父类。 -
contains(Object element) → bool
如果集合中包含一个元素等于element,返回true -
elementAt(int index)
通过索引返回元素。 -
every(bool test(E element))
检查可迭代对象的每一个元素是否都满足test。 -
Iterable<T> expand<T>(Iterable<T> f(E element))
将Iterable的每个元素扩展为0个或多个元素。该方法返回的Iterable是f方法返回的Iterable的元素组合而成。
var pairs = [[1, 2], [3, 4]];
var flattened = pairs.expand((pair) => pair).toList();
print(flattened); // => [1, 2, 3, 4];
var input = [1, 2, 3];
var duplicated = input.expand((i) => [i, i]).toList();
print(duplicated); // => [1, 1, 2, 2, 3, 3]
-
E firstWhere(bool test(E element), {E orElse()})
返回满足test的第一个元素,如果没有元素满足test且orElse不为null,则返回orElse方法返回的对象 -
T fold<T>(T initialValue, T combine(T previousValue, E element))
通过迭代,将集合的所有元素与一个存在的值(initialValue)用提供的函数结合(combine), 将集合换算成单一的值
源码
T fold<T>(T initialValue, T combine(T previousValue, E element)) {
var value = initialValue;
for (E element in this) value = combine(value, element);
return value;
}
-
Iterable<E> followedBy(Iterable<E> other)
将other拼接到this后面 -
void forEach(void f(E element))
对集合的每个元素,按迭代顺序应用f函数。 -
String join([String separator = ""])
将this中所有元素转换成字符串,然后拼接成一个字符串返回。如果separator为非空字符串,则将元素转成字符串进行拼接的时候用separator分割
Iterable<String> strIterable = Iterable.generate(10,(index)=>index.toString());
print(strIterable.join('pre'));
//0pre1pre2pre3pre4pre5pre6pre7pre8pre9
-
E lastWhere(bool test(E element), {E orElse()})
返回最后一个满足test方法的元素,如果没有元素满足条件,且orElse非空,则返回orElse方法返回的值 -
Iterable<T> map<T>(T f(E e))
按迭代顺序,对Iterable
的每个元素调用f
,用返回值创建一个新的惰性Iterable。 -
E reduce(E combine(E value, E element))
通过迭代,用提供的函数结合(combine)集合的所有元素,将集合换算成单一的值,
E reduce(E combine(E value, E element)) {
Iterator<E> iterator = this.iterator;
if (!iterator.moveNext()) {
throw IterableElementError.noElement();
}
E value = iterator.current;
while (iterator.moveNext()) {
value = combine(value, iterator.current);
}
return value;
}
-
E singleWhere(bool test(E element), {E orElse()})
返回唯一满足test条件的值,如果有多个值或者没有值满足条件,则返回orElse方法的返回值或者报错 -
Iterable<E> skip(int count)
返回一个惰性的可迭代对象,包含此对象除了最初的count个元素外的所有元素。如果count超出范围,则返回空的Iterable -
Iterable<E> skipWhile(bool test(E value))
跳过所有的开始的test(element)返回true的元素。如果所有的元素都满足test,那么返回的Iterable为空。否则,剩下的元素以和this相同的迭代顺序,以第一个test(element)返回false的元素开始迭代。
Iterable<int> strIterable = Iterable.generate(10,(index)=>0);
List<int> list = strIterable.toList();
list.add(0);
list.add(0);
list.add(8);
list.add(9);
print(list.skipWhile((element)=>element == 0).toString());
//(8, 9)
-
Iterable<E> take(int count)
返回最初的count个元素。 -
Iterable<E> takeWhile(bool test(E value))
元素通过迭代iterator来进行计算,直到一个元素被发现test(element)
返回false
为止。在那个时候,返回的Iterable停止
Iterable<int> strIterable = Iterable.generate(10,(index)=>index);
print(strIterable.takeWhile((element)=>element<5).toString());
//(0, 1, 2, 3, 4)
-
toList、toSet、toString
转换为list、set、string -
Iterable<E> where(bool test(E element))
返回所有满足test条件的值 -
Iterable<T> whereType<T>()
返回所有T类型的数据
Stream
https://zhuanlan.zhihu.com/p/63876241
-
any
同Iterable,当遇到符合条件的值后,any将不再处理后续值。如果是广播流,不影响其他监听。 -
asBroadcastStream
返回一个多订阅流,它生成与原来流相同的事件。 -
asyncExpand
将每个元素转换为一系列异步事件。asyncExpand返回的Stream会输出所有值 -
map
同Iterable,转换后的值通过返回的stream输出 -
cast
将此流改编为Stream<R>类型的流 -
Future<bool> contains(Object needle)
是否包含某个元素 -
Stream<T> distinct([bool equals(T previous, T next)])
如果equals返回true,则跳过当前值得。previous的值为distinct返回的stream的最新值 -
Future<E> drain<E>([E futureValue])
丢弃此流上的所有数据,但在完成或发生错误时发出信号。如下例子,当controller.stream完成或者发生错误的时候打印出end
controller.stream.drain('end').then((data){
print(data);
//end
});
-
Future<T> elementAt(int index)
通过future返回地index个值,从0开始 -
Future<bool> every(bool test(T element))
检查是否所有值都满足test -
Stream<S> expand<S>(Iterable<S> convert(T element))
将此流的每个元素转换为一系列元素。 -
firstWhere
查找此流匹配条件的第一个元素 -
Future<S> fold<S>(S initialValue, S combine(S previous, T element))
通过迭代,将集合的所有元素与一个存在的值(initialValue)用提供的函数结合(combine), 将集合换算成单一的值。与Iterable的fold方法效果一样 -
Future forEach(void action(T element))
对流中的每个值执行action方法 - ``