общая Java-функция для создания карт из строк - PullRequest
6 голосов
/ 25 октября 2010

Существует ли какая-либо общая функция (в Apache Commons или аналогичная) для создания карт из строк, подобных параметрам запроса?

Для конкретного:

Вариант a (Строка запроса)

s="a=1&b=3"   
=> Utils.mapFunction(s, '&', '=') 
=>  (Hash)Map { a:1; b:3 }

Вариант b (Cachecontrol-Header)

s="max-age=3600;must-revalidate"
=> Utils.mapFunction(s, ';', '=') 
=>  (Hash)Map { max-age:3600; must-revalidate:true }

Я не хочу изобретать велосипед.

Спасибо

Ответы [ 3 ]

2 голосов
/ 25 октября 2010

stringtomap

Попробуйте или просмотрите исходный код, чтобы увидеть, как он был реализован.

1 голос
/ 26 октября 2010

Кажется, что простое расширение HashMap сделает это:

/**
 * Simple demo of extending a HashMap
 */
public class TokenizedStringHashMap extends HashMap<String, String> {

  void putAll(String tokenizedString, String delimiter) {
    String[] nameValues = tokenizedString.split(delimiter);
    for (String nameValue : nameValues) {
      String[] pair = nameValue.split("=");
      if (pair.length == 1) {
        // Duplicate the key name if there is only one value
        put(pair[0], pair[0]);
      } else {
        put(pair[0], pair[1]);
      }
    }
  }

  public static void main(String[] args) {
    TokenizedStringHashMap example = new TokenizedStringHashMap();

    example.putAll("a=1&b=3", "&");
    System.out.println(example.toString());
    example.clear();

    example.putAll("max-age=3600;must-revalidate", ";");
    System.out.println(example.toString());

  }
}
1 голос
/ 25 октября 2010

Я не думаю, что такая библиотека существует, но если вы хотите переопределить ее с очень небольшим количеством кода, вы можете использовать «лямбда-ориентированные библиотеки», такие как Guava или LambdaJ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...