core/src/main/java/com/twitter/elephantbird/util/W3CLogParser.java
public Map<String, String> parse(String line) throws IOException {
    Map<String, String> map = new HashMap<String, String>();

    // Get the version CRC and find the field definition
    List<String> fields = Arrays.asList(line.split(DELIMITER));
    List<String> fieldNames = fieldDef_.get(fields.get(0));
    if (fieldNames == null) {
      throw new IOException("cannot find matching field definition for CRC "
          + fields.get(0));
    }
    if (fieldNames.size() != fields.size()) {
      throw new IOException("W3C field definition and input line for CRC "
          + fields.get(0) + " does not match:\n" + line);
    }

    // Map values to field names
    for (int fieldNum = 1; fieldNum < fieldNames.size(); fieldNum++) {
      map.put(fieldNames.get(fieldNum), fields.get(fieldNum));
    }

    return map;
  }
public Map<String, String> parse(String line) throws IOException {
    Map<String, String> map = new HashMap<String, String>();

    // Get the version CRC and find the field definition
    List<String> fields = Arrays.asList(line.split(DELIMITER));
    List<String> fieldNames = fieldDef_.get(fields.get(0));
    if (fieldNames == null) {
      throw new IOException("cannot find matching field definition for CRC "
          + fields.get(0));
    }
    if (fieldNames.size() != fields.size()) {
      throw new IOException("W3C field definition and input line for CRC "
          + fields.get(0) + " does not match:\n" + line);
    }

    // Map values to field names
    for (int fieldNum = 1; fieldNum < fieldNames.size(); fieldNum++) {
      map.put(fieldNames.get(fieldNum), fields.get(fieldNum));
    }

    return map;
  }
<FieldName, Value>