code: public void next() {
  		newKeyGroup = false;
  		newKVState = false;
  
  		final RocksIteratorWrapper rocksIterator = currentSubIterator.getIterator();
  		rocksIterator.next();
  
  		byte[] oldKey = currentSubIterator.getCurrentKey();
  		if (rocksIterator.isValid()) {
  
  			currentSubIterator.setCurrentKey(rocksIterator.key());
  
  			if (isDifferentKeyGroup(oldKey, currentSubIterator.getCurrentKey())) {
  				heap.offer(currentSubIterator);
  				currentSubIterator = heap.remove();
  				newKVState = currentSubIterator.getIterator() != rocksIterator;
  				detectNewKeyGroup(oldKey);
  			}
  		} else {
  			IOUtils.closeQuietly(rocksIterator);
  
  			if (heap.isEmpty()) {
  				currentSubIterator = null;
  				valid = false;
  			} else {
  				currentSubIterator = heap.remove();
  				newKVState = true;
  				detectNewKeyGroup(oldKey);
  			}
  		}
  	}
docs: Advances the iterator. Should only be called if {@link #isValid()} returned true.
  Valid flag can only change after calling {@link #next()}.