@Override public List<Readable<T>> getReadables(final int desiredNumOfSplits) throws Exception { final List<Readable<T>> readables = new ArrayList<>(); final long sliceSize = initializedSourceData.spliterator().getExactSizeIfKnown() / desiredNumOfSplits; final Iterator<T> iterator = initializedSourceData.iterator(); for (int i = 0; i < desiredNumOfSplits; i++) { final List<T> dataForReader = new ArrayList<>(); if (i == desiredNumOfSplits - 1) { // final iteration iterator.forEachRemaining(dataForReader::add); } else { for (int j = 0; j < sliceSize && iterator.hasNext(); j++) { dataForReader.add(iterator.next()); } } readables.add(new InMemorySourceReadable<>(dataForReader)); } return readables; }
@Override public List<Readable<T>> getReadables(final int desiredNumOfSplits) throws Exception { final List<Readable<T>> readables = new ArrayList<>(); final long sliceSize = initializedSourceData.spliterator().getExactSizeIfKnown() / desiredNumOfSplits; final Iterator<T> iterator = initializedSourceData.iterator(); for (int i = 0; i < desiredNumOfSplits; i++) { final List<T> dataForReader = new ArrayList<>(); if (i == desiredNumOfSplits - 1) { // final iteration iterator.forEachRemaining(dataForReader::add); } else { for (int j = 0; j < sliceSize && iterator.hasNext(); j++) { dataForReader.add(iterator.next()); } } readables.add(new InMemorySourceReadable<>(dataForReader)); } return readables; }