From b36df9fe990ad45388158c72f63f1c4f291f0a95 Mon Sep 17 00:00:00 2001 From: Elena_Fedorovskaia Date: Tue, 18 Jul 2017 16:18:56 +0300 Subject: [PATCH] part 1 is done --- .../part1/exercise/RectangleSpliterator.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/spliterators/part1/exercise/RectangleSpliterator.java b/src/main/java/spliterators/part1/exercise/RectangleSpliterator.java index 678f4f5..5eac3b5 100755 --- a/src/main/java/spliterators/part1/exercise/RectangleSpliterator.java +++ b/src/main/java/spliterators/part1/exercise/RectangleSpliterator.java @@ -9,9 +9,9 @@ public class RectangleSpliterator extends Spliterators.AbstractIntSpliterator { private final int innerLength; private final int[][] array; - private final int startOuterInclusive; + private int startOuterInclusive; private final int endOuterExclusive; - private final int startInnerInclusive; + private int startInnerInclusive; public RectangleSpliterator(int[][] array) { this(array, 0, array.length, 0); @@ -29,18 +29,33 @@ private RectangleSpliterator(int[][] array, int startOuterInclusive, int endOute @Override public OfInt trySplit() { - // TODO - throw new UnsupportedOperationException(); + final int outerLen = endOuterExclusive - startOuterInclusive; + if (outerLen <= 1) return null; + final int outerMid = startOuterInclusive + outerLen / 2; + + final RectangleSpliterator res = new RectangleSpliterator(array, startOuterInclusive, outerMid, startInnerInclusive); + startOuterInclusive = outerMid; + return res; } + @Override public long estimateSize() { - return ((long) endOuterExclusive - startOuterInclusive)*innerLength - startInnerInclusive; + return ((long) endOuterExclusive - startOuterInclusive) * innerLength - startInnerInclusive; } @Override public boolean tryAdvance(IntConsumer action) { - // TODO - throw new UnsupportedOperationException(); + if (startOuterInclusive >= endOuterExclusive + && startInnerInclusive >= innerLength) + return false; + + for (int i = startInnerInclusive; i < innerLength; i++) { + final int value = array[startOuterInclusive][startInnerInclusive]; + startInnerInclusive++; + action.accept(value); + } + + return true; } }