public <SUB extends ObjectValidatorBuilder<K, ? extends SELF, ?>> SUB withKeys(BiFunction<ObjectValidatorBuilderFactory<SELF>, K, SUB> factory) {

    if (this.keySubBuilder != null) {
      throw new IllegalStateException("keySubBuilder already exists!");
    }
    SUB sub = factory.apply(getSubFactory(), null);
    this.keySubBuilder = sub;
    return sub;
  }
public < SUB extends ObjectValidatorBuilder < K , ? extends SELF , ? > > SUB withKeys ( BiFunction < ObjectValidatorBuilderFactory < SELF > , K , SUB > factory ) { if ( this . keySubBuilder != null ) { throw new IllegalStateException ( "keySubBuilder already exists!" ) ; } SUB sub = factory . apply ( getSubFactory ( ) , null ) ; this . keySubBuilder = sub ; return sub ; }
Creates a new {@link ObjectValidatorBuilder builder} for the {@link AbstractValidator validators} to invoke for
each {@link Map#keySet() key} in the {@link Map}.<br/>
Use {@link #and()} to return to this builder after the sub-builder is complete.<br/>
A typical usage looks like this:

<pre>
[...].withKeys((f, v) -> f.create(v)).[...].and().[...].build()
</pre>

@param <SUB> the generic type of the returned sub-builder.
@param factory lambda function used to create the returned sub-builder by calling the according {@code create}
method on the supplied {@link ObjectValidatorBuilderFactory} with the given dummy element.
@return the new sub-builder.