public final @Nullable E last() {
    if (this == EMPTY) return null;
    E single = asElement();
    if (single != null) return single;
    List<E> list = asRandomAccess();
    if (list != null) {
      return list.isEmpty() ? null : list.get(list.size() - 1);
    }
    E cur = null;
    for (E e : this) {
      cur = e;
    }
    return cur;
  }
public final @Nullable E last()