/** If input is null, then an empty map is returned. */ public static <K, V> Map<K, V> parse( @Nullable String input, Converter<K> keyConverter, Converter<V> valueConverter) { Map<K, V> map = Maps.newLinkedHashMap(); if (input != null) { FieldParser reader = new FieldParser(input); boolean end = false; while (!end) { String key = reader.nextKey(); if (key == null) { end = true; } else { String val = StringUtils.defaultString(reader.nextVal(), ""); map.put(keyConverter.parse(key), valueConverter.parse(val)); } } } return map; }