Dart-可迭代对象 Iterable

在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);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。