dart Iterable、Stream

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方法
  • ``
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • PYTHON-进阶-ITERTOOLS模块小结转自wklken:http://wklken.me/posts/20...
    C_Y_阅读 968评论 0 2
  • abs() 函数 描述 abs() 函数返回数字的绝对值。 语法 以下是 abs() 方法的语法: abs( x ...
    时光是座城阅读 492评论 0 2
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,699评论 0 3
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,383评论 0 4
  • # Python关键字 部分单词没有分类整理按照顺序整理的 ``` statements语句 print输出 qu...
    ZhouLang阅读 594评论 0 0