docs: public <K, V> KVStreamlet<K, V> keyBy(SerializableFunction<R, K> keyExtractor,
                                          SerializableFunction<R, V> valueExtractor) {
      checkNotNull(keyExtractor, "keyExtractor cannot be null");
      checkNotNull(valueExtractor, "valueExtractor cannot be null");
  
      KeyByStreamlet<R, K, V> retval =
          new KeyByStreamlet<R, K, V>(this, keyExtractor, valueExtractor);
      addChild(retval);
      return new KVStreamletShadow<K, V>(retval);
    }