code: public static <K, V> LinkedOptionalMap<K, V> optionalMapOf(Map<K, V> sourceMap, Function<K, String> keyNameGetter) {
  
  		LinkedHashMap<String, KeyValue<K, V>> underlyingMap = new LinkedHashMap<>(sourceMap.size());
  
  		sourceMap.forEach((k, v) -> {
  			String keyName = keyNameGetter.apply(k);
  			underlyingMap.put(keyName, new KeyValue<>(k, v));
  		});
  
  		return new LinkedOptionalMap<>(underlyingMap);
  	}
docs: Creates an {@code LinkedOptionalMap} from the provided map.
  
  <p>This method is the equivalent of {@link Optional#of(Object)} but for maps. To support more than one {@code NULL}
  key, an optional map requires a unique string name to be associated with each key (provided by keyNameGetter)
  
  @param sourceMap     a source map to wrap as an optional map.
  @param keyNameGetter function that assigns a unique name to the keys of the source map.
  @param <K>           key type
  @param <V>           value type
  @return an {@code LinkedOptionalMap} with optional named keys, and optional values.