code: @Override
      public V getAndPut(K key, ValueProvider<? super K, ? extends V> valueProvider) {
          return map.computeIfAbsent(key, valueProvider::provide);
      }
docs: Try to get the value from cache.
  If not found, create the value by {@link MemoizeCache.ValueProvider} and put it into the cache, at last return the value.
  
  The operation is completed atomically.
  
  @param key
  @param valueProvider provide the value if the associated value not found