code: @Override
    public VALUE putIfPresent(KEY key, VALUE newValue) {
  
      Assert.notNull(newValue, "Value is required");
  
      if (key != null) {
  
        AtomicReference<VALUE> oldValueRef = new AtomicReference<>(null);
  
        return newValue.equals(this.map.computeIfPresent(key, (theKey, oldValue) -> {
          oldValueRef.set(oldValue);
          return newValue;
        })) ? oldValueRef.get() : null;
      }
  
      return null;
    }
docs: Puts the {@link VALUE value} in this {@link Cache} mapped to the given {@link KEY key} iff an entry
  with the given {@link KEY key} already exists in this {@link Cache}.
  
  @param key {@link KEY key} used to map the {@link VALUE new value} in this {@link Cache}.
  @param newValue {@link VALUE new value} replacing the existing value mapped to the given {@link KEY key}
  in this {@link Cache}.
  @return the existing {@link VALUE value} if present, otherwise return {@literal null}.
  @throws IllegalArgumentException if the {@link VALUE value} is {@literal null}.
  @see #contains(Comparable)
  @see #put(Comparable, Object)
  @see #putIfAbsent(Comparable, Object)