code: public static Map assoc(final Map map, final Class<? extends Map> nodeClass, final Object... pathAndValue) {
          if (pathAndValue == null || pathAndValue.length < 1) {
              throw new IllegalArgumentException(
                  "Path and value are required! Call it like: assocIn(Object[] path, Object value)");
          }
          return assoc(
              map,
              nodeClass,
              Arrays.copyOfRange(pathAndValue, 0, pathAndValue.length - 1),
              pathAndValue[pathAndValue.length - 1]
          );
      }
docs: Associates new value in map placed at path. New nodes are created with nodeClass if needed.
  @param map subject original map
  @param nodeClass class for intermediate nodes
  @param pathAndValue path to place new value and value at the end of this sequence
  @return original map