withoutLast method

Iterable<T> withoutLast()

Lazily returns all values without the last one.

Example:

[1, 2, 3].withoutLast(); // [1, 2]
[].withoutLast(); // [];

Implementation

Iterable<T> withoutLast() sync* {
  var iter = iterator;

  var hasFirst = iter.moveNext();

  if (!hasFirst) {
    return;
  }

  while (true) {
    var value = iter.current;
    var isLastOne = !iter.moveNext();
    if (!isLastOne) {
      yield value;
    } else {
      break;
    }
  }
}