class ComparingSnakeOrCamelCaseFields extends ComparingNormalizedFields {

  public static final ComparingSnakeOrCamelCaseFields COMPARING_SNAKE_OR_CAMEL_CASE_FIELDS = new ComparingSnakeOrCamelCaseFields();

  /**
   * Transforms snake case field names into camel case (leave camel case fields as is).
   * <p>
   * For example, this allows to compare {@code Person} object with camel case fields like {@code firstName} to a
   * {@code PersonDto} object with snake case fields like {@code first_name}.
   *
   * @param name the field name to normalize
   * @return camel case version of the field name
   */
  @Override
  public String normalizeFieldName(String name) {
    String camelCaseName = toCamelCase(name);
    return normalizeAcronyms(camelCaseName);
  }

  /**
   * Normalizes uppercase acronyms by keeping only the first acronym letter uppercase, ex: {@code normalizeAcronyms("URl")} gives
   * {@code "Url"}
   *
   * @param name the name to normalize
   * @return the normalized name
   */
  private static String normalizeAcronyms(String name) {<FILL_FUNCTION_BODY>}

  @Override
  public String getDescription() {
    return "comparing camel case and snake case fields";
  }

}

    for (int i = 0; i < name.length(); i++) {
      if (!isUpperCase(name.charAt(i))) continue;
      int j = i + 1;
      while (j < name.length() && isUpperCase(name.charAt(j))) {
        j++;
      }
      return name.substring(0, i + 1)
             + name.substring(i + 1, j).toLowerCase()
             + normalizeAcronyms(name.substring(j));
    }
    return name;
  
<methods>public non-sealed void <init>() ,public java.lang.Object getChildNodeValue(java.lang.String, java.lang.Object) ,public Set<java.lang.String> getChildrenNodeNamesOf(java.lang.Object) ,public java.lang.String getDescription() <variables>private static final java.lang.String NO_FIELD_FOUND,private final Map<Class<?>,Set<java.lang.String>> fieldNamesPerClass,private final Map<java.lang.Object,Map<java.lang.String,java.lang.String>> originalFieldNamesByNormalizedFieldNameByNode