# where method

1. @override

Iterable<E> where(

1. bool test(
   1. E element
   )

)
override

Creates a new lazy Iterable with all elements that satisfy the predicate `test`.

The matching elements have the same order in the returned iterable as they have in iterator.

This method returns a view of the mapped elements. As long as the returned Iterable is not iterated over, the supplied function `test` will not be invoked. Iterating will not cache results, and thus iterating multiple times over the returned Iterable may invoke the supplied function `test` multiple times on the same element.

Example:

    final numbers = <int>[1, 2, 3, 5, 6, 7];
    var result = numbers.where((x) => x < 5); // (1, 2, 3)
    result = numbers.where((x) => x > 5); // (6, 7)
    result = numbers.where((x) => x.isEven); // (2, 6)

## Implementation

    @override
    Iterable<E> where(bool Function(E element) test) sync* {
      for (final element in this) {
        if (test(element)) {
          yield element;
        }
      }
    }