@Override public long size() { if (size == -1) { size = 0; Iterator<? extends T> iterator = iterator(0, Integer.MAX_VALUE); while (iterator.hasNext()) { iterator.next(); size++; } } return size; }
@Override public T next() { if (!hasNext()) { throw new IllegalStateException(); } T next = currentBranch.next(); previousBranch = currentBranch; if (iterateChildren(next)) { currentBranch = new Branch<>(previousBranch, provider.getChildren(next)); } return next; }