package com.bestvike.linq.adapter.enumerator; import com.bestvike.linq.enumerable.AbstractEnumerator; import java.util.Iterator; import java.util.Spliterator; import java.util.Spliterators; /** * Created by 许崇雷 on 2019-07-30. */ public final class SpliteratorEnumerator<TSource> extends AbstractEnumerator<TSource> { private final Spliterator<TSource> source; private Iterator<TSource> iterator; public SpliteratorEnumerator(Spliterator<TSource> source) { this.source = source; } @Override public boolean moveNext() { switch (this.state) { case 0: this.iterator = Spliterators.iterator(this.source); this.state = 1; case 1: if (this.iterator.hasNext()) { this.current = this.iterator.next(); return true; } this.close(); return false; default: return false; } } @Override public void close() { this.iterator = null; super.close(); } }