diff --git a/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java b/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java index deb4867..362d611 100755 --- a/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java +++ b/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java @@ -3,6 +3,7 @@ import java.util.Spliterator; import java.util.Spliterators; import java.util.function.Consumer; +import java.util.function.DoubleConsumer; public class ZipWithIndexDoubleSpliterator extends Spliterators.AbstractSpliterator { @@ -22,35 +23,42 @@ private ZipWithIndexDoubleSpliterator(int firstIndex, OfDouble inner) { @Override public int characteristics() { - // TODO - throw new UnsupportedOperationException(); + return inner.characteristics(); } @Override public boolean tryAdvance(Consumer action) { - // TODO - throw new UnsupportedOperationException(); + return inner.tryAdvance((DoubleConsumer) d -> { + final IndexedDoublePair pair = new IndexedDoublePair(currentIndex, d); + currentIndex = currentIndex + 1; + action.accept(pair); + }); } @Override public void forEachRemaining(Consumer action) { - // TODO - throw new UnsupportedOperationException(); + inner.forEachRemaining((DoubleConsumer) d -> { + final IndexedDoublePair pair = new IndexedDoublePair(currentIndex, d); + currentIndex = currentIndex + 1; + action.accept(pair); + }); } @Override public Spliterator trySplit() { - // TODO - // if (inner.hasCharacteristics(???)) { - // use inner.trySplit - // } else - - return super.trySplit(); + if (inner.hasCharacteristics(Spliterator.SUBSIZED)) { + final OfDouble split = this.inner.trySplit(); + if (split == null) return null; + final ZipWithIndexDoubleSpliterator result = new ZipWithIndexDoubleSpliterator(currentIndex, split); + currentIndex += split.estimateSize(); + return result; + } else { + return super.trySplit(); + } } @Override public long estimateSize() { - // TODO - throw new UnsupportedOperationException(); + return inner.estimateSize(); } }