code: public static <K, V> Lens.Simple<Map<K, V>, Map<V, K>> inverted() {
          return simpleLens(m -> {
              Map<V, K> inverted = new HashMap<>();
              m.forEach((key, value) -> inverted.put(value, key));
              return inverted;
          }, (m, im) -> {
              Map<K, V> updated = new HashMap<>(m);
              updated.clear();
              updated.putAll(view(inverted(), im));
              return updated;
          });
      }
docs: A lens that focuses on the inverse of a map (keys and values swapped). In the case of multiple equal values
  becoming keys, the last one wins.
  <p>
  Note that this lens is very likely to NOT be lawful, since "you get back what you put in" will fail for any keys
  that map to the same value.
  
  @param <K> the key type
  @param <V> the value type
  @return a lens that focuses on the inverse of a map