@Override
        protected KeyValue<Bytes, byte[]> makeNext() {
            while (currList.isEmpty() && bytesIterator.hasNext()) {
                final KeyValue<Bytes, byte[]> next = bytesIterator.next();
                nextKey = next.key;
                currList.addAll(LIST_SERDE.deserializer().deserialize(null, next.value));
            }

            if (currList.isEmpty()) {
                return allDone();
            } else {
                next = KeyValue.pair(nextKey, currList.remove(0));
                return next;
            }
        }
A wrapper key-value store that serializes the record values bytes as a list.
As a result put calls would be interpreted as a get-append-put to the underlying RocksDB store.
A put(k,null) will still delete the key, ie, the full list of all values of this key.
Range iterators would also flatten the value lists and return the values one-by-one.

This store is used for cases where we do not want to de-duplicate values of the same keys but want to retain all such values.
streams/src/main/java/org/apache/kafka/streams/state/internals/ListValueStore.java