IterableExtensions<T>
LogoDart

IterableExtensions<T>#

extension IterableExtensions<T> on Iterable<T>

Annotations: @Since.new("3.0")

Operations on iterables.

Properties#

firstOrNull extension no setter#

T? get firstOrNull

The first element of this iterator, or null if the iterable is empty.

Available on Iterable<E>, provided by the IterableExtensions<T> extension

Implementation
T? get firstOrNull {
  var iterator = this.iterator;
  if (iterator.moveNext()) return iterator.current;
  return null;
}

indexed extension no setter#

Iterable<Record> get indexed

Pairs of elements of the indices and elements of this iterable.

The elements are (0, this.first) through (this.length - 1, this.last), in index/iteration order.

Available on Iterable<E>, provided by the IterableExtensions<T> extension

Implementation
@pragma('vm:prefer-inline')
Iterable<(int, T)> get indexed => IndexedIterable<T>(this, 0);

lastOrNull extension no setter#

T? get lastOrNull

The last element of this iterable, or null if the iterable is empty.

This computation may not be efficient. The last value is potentially found by iterating the entire iterable and temporarily storing every value. The process only iterates the iterable once. If iterating more than once is not a problem, it may be more efficient for some iterables to do:

var lastOrNull = iterable.isEmpty ? null : iterable.last;

Available on Iterable<E>, provided by the IterableExtensions<T> extension

Implementation
T? get lastOrNull {
  if (this is EfficientLengthIterable) {
    if (isEmpty) return null;
    return last;
  }
  var iterator = this.iterator;
  if (!iterator.moveNext()) return null;
  T result;
  do {
    result = iterator.current;
  } while (iterator.moveNext());
  return result;
}

singleOrNull extension no setter#

T? get singleOrNull

The single element of this iterator, or null.

If the iterator has precisely one element, this is that element. Otherwise, if the iterator has zero elements, or it has two or more, the value is null.

Available on Iterable<E>, provided by the IterableExtensions<T> extension

Implementation
T? get singleOrNull {
  var iterator = this.iterator;
  if (iterator.moveNext()) {
    var result = iterator.current;
    if (!iterator.moveNext()) return result;
  }
  return null;
}

Methods#

elementAtOrNull() extension#

T? elementAtOrNull(int index)

The element at position index of this iterable, or null.

The index is zero based, and must be non-negative.

Returns the result of elementAt(index) if the iterable has at least index + 1 elements, and null otherwise.

Available on Iterable<E>, provided by the IterableExtensions<T> extension

Implementation
T? elementAtOrNull(int index) {
  RangeError.checkNotNegative(index, "index");
  if (this is EfficientLengthIterable) {
    if (index >= length) return null;
    return elementAt(index);
  }
  var iterator = this.iterator;
  do {
    if (!iterator.moveNext()) return null;
  } while (--index >= 0);
  return iterator.current;
}