From d75d007f55f6f28b10336cc8edbf9d4e00b30f84 Mon Sep 17 00:00:00 2001 From: Vasilii Bobkov Date: Tue, 18 Jul 2017 13:14:31 +0300 Subject: [PATCH 1/2] Part 2 was done --- .../part2/exercise/IndexedDoublePair.java | 6 +- .../ZipWithIndexDoubleSpliterator.java | 57 +++++++++++++------ 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/main/java/spliterators/part2/exercise/IndexedDoublePair.java b/src/main/java/spliterators/part2/exercise/IndexedDoublePair.java index d3c0162..424948b 100755 --- a/src/main/java/spliterators/part2/exercise/IndexedDoublePair.java +++ b/src/main/java/spliterators/part2/exercise/IndexedDoublePair.java @@ -5,15 +5,15 @@ import org.apache.commons.lang3.builder.ToStringBuilder; public class IndexedDoublePair { - private final int index; + private final long index; private final double value; - public IndexedDoublePair(int index, double value) { + public IndexedDoublePair(long index, double value) { this.index = index; this.value = value; } - public int getIndex() { + public long getIndex() { return index; } diff --git a/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java b/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java index deb4867..4f6f5b5 100755 --- a/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java +++ b/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java @@ -1,5 +1,6 @@ package spliterators.part2.exercise; +import java.util.Comparator; import java.util.Spliterator; import java.util.Spliterators; import java.util.function.Consumer; @@ -8,13 +9,13 @@ public class ZipWithIndexDoubleSpliterator extends Spliterators.AbstractSplitera private final OfDouble inner; - private int currentIndex; + private long currentIndex; public ZipWithIndexDoubleSpliterator(OfDouble inner) { this(0, inner); } - private ZipWithIndexDoubleSpliterator(int firstIndex, OfDouble inner) { + private ZipWithIndexDoubleSpliterator(long firstIndex, OfDouble inner) { super(inner.estimateSize(), inner.characteristics()); currentIndex = firstIndex; this.inner = inner; @@ -22,35 +23,59 @@ private ZipWithIndexDoubleSpliterator(int firstIndex, OfDouble inner) { @Override public int characteristics() { - // TODO - throw new UnsupportedOperationException(); + inner.characteristics(); + inner.hasCharacteristics(Spliterator.CONCURRENT); + inner.hasCharacteristics(Spliterator.DISTINCT); + inner.hasCharacteristics(Spliterator.IMMUTABLE); + inner.hasCharacteristics(Spliterator.NONNULL); + inner.hasCharacteristics(Spliterator.ORDERED); + inner.hasCharacteristics(Spliterator.SIZED); + inner.hasCharacteristics(Spliterator.SUBSIZED); + inner.hasCharacteristics(Spliterator.SORTED); + return inner.characteristics() | NONNULL; } @Override public boolean tryAdvance(Consumer action) { - // TODO - throw new UnsupportedOperationException(); + if (inner.tryAdvance((double s) -> action.accept(new IndexedDoublePair(currentIndex, s)))) { + currentIndex++; + return true; + } else { + return false; + } } @Override public void forEachRemaining(Consumer action) { - // TODO - throw new UnsupportedOperationException(); + inner.forEachRemaining((double s) -> { + action.accept(new IndexedDoublePair(currentIndex, s)); + currentIndex++; + }); } @Override public Spliterator trySplit() { - // TODO - // if (inner.hasCharacteristics(???)) { - // use inner.trySplit - // } else - - return super.trySplit(); + if (inner.hasCharacteristics(Spliterator.SUBSIZED)) { + Spliterator spliterator = new ZipWithIndexDoubleSpliterator(currentIndex, inner.trySplit()); + currentIndex += spliterator.estimateSize(); + return spliterator; + } else{ + return super.trySplit(); + } } @Override public long estimateSize() { - // TODO - throw new UnsupportedOperationException(); + return inner.estimateSize(); + } + + @Override + public Comparator getComparator() { + if (inner.hasCharacteristics(SORTED)) { + Comparator comparator = inner.getComparator(); + return (o1, o2) -> comparator.compare(o1.getValue(), o2.getValue()); + } else { + throw new IllegalStateException(); + } } } From 646268ef357c52e9f1e6a1e79e20b039fb561711 Mon Sep 17 00:00:00 2001 From: Vasilii Bobkov Date: Tue, 18 Jul 2017 13:18:17 +0300 Subject: [PATCH 2/2] Part 2 deleted unnecessary code --- .../part2/exercise/ZipWithIndexDoubleSpliterator.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java b/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java index 4f6f5b5..54b211c 100755 --- a/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java +++ b/src/main/java/spliterators/part2/exercise/ZipWithIndexDoubleSpliterator.java @@ -23,15 +23,6 @@ private ZipWithIndexDoubleSpliterator(long firstIndex, OfDouble inner) { @Override public int characteristics() { - inner.characteristics(); - inner.hasCharacteristics(Spliterator.CONCURRENT); - inner.hasCharacteristics(Spliterator.DISTINCT); - inner.hasCharacteristics(Spliterator.IMMUTABLE); - inner.hasCharacteristics(Spliterator.NONNULL); - inner.hasCharacteristics(Spliterator.ORDERED); - inner.hasCharacteristics(Spliterator.SIZED); - inner.hasCharacteristics(Spliterator.SUBSIZED); - inner.hasCharacteristics(Spliterator.SORTED); return inner.characteristics() | NONNULL; }