code: public <X extends Exception> V merge(K key, E e, Try.BiFunction<? super V, ? super E, ? extends V, X> remappingFunction) throws X {
          N.checkArgNotNull(remappingFunction);
          N.checkArgNotNull(e);
  
          final V oldValue = get(key);
  
          if (N.isNullOrEmpty(oldValue)) {
              put(key, e);
              return get(key);
          }
  
          final V newValue = remappingFunction.apply(oldValue, e);
  
          if (N.notNullOrEmpty(newValue)) {
              valueMap.put(key, newValue);
          } else {
              if (oldValue != null) {
                  valueMap.remove(key);
              }
          }
  
          return newValue;
      }
docs: The implementation is equivalent to performing the following steps for this Multimap:
  
  <pre>
  final V oldValue = get(key);
  
  if (N.isNullOrEmpty(oldValue)) {
  put(key, e);
  return get(key);
  }
  
  final V newValue = remappingFunction.apply(oldValue, e);
  
  if (N.notNullOrEmpty(newValue)) {
  valueMap.put(key, newValue);
  } else {
  if (oldValue != null) {
  valueMap.remove(key);
  }
  }
  
  return newValue;
  </pre>
  
  @param key
  @param e
  @param remappingFunction
  @return