docs: public static <K, V> Map<V, K> inverse(Map<K, V> map, boolean force) {
          // Because we can not rely on 3rd party library(excluding antlr, asm), we have to implement our own utils such as the `inverse` method...
          // Actually `BiMap` of Guava and `BidiMap` of commons-collections are both suitable for this scenario.
  
          Map<V, K> resultMap = new LinkedHashMap<>();
  
          for (Map.Entry<K, V> entry : map.entrySet()) {
              V value = entry.getValue();
  
              if (!force && resultMap.containsKey(value)) {
                  throw new IllegalArgumentException("duplicated key found: " + value);
              }
  
              resultMap.put(value, entry.getKey());
          }
  
          return Collections.<V, K>unmodifiableMap(resultMap);
      }