HTTPリクエストのパラメータを保持したい場合に、HashMapなどの連想配列を使うことが多いと思いますが、以下のようなパラメータの場合、HashMapが重複キーを許さないため、param2をうまく保持できないときがあります。
param1=value1¶m2=value2-1¶m2=value2-2¶m2=value2-3¶m3=value3
というわけで、重複キーを許す(順序も保持しつつ)Mapを探したところ、
apache pig の LinkedMultiMapでいけそうだったので試してみました。
-----
ソース
LinkedMultiMap<String,String> linkedmultimap =
new LinkedMultiMap<String,String>();
linkedmultimap.put("param1", "value1");
linkedmultimap.put("param2", "value2-1");
linkedmultimap.put("param2", "value2-2");
linkedmultimap.put("param2", "value2-3");
linkedmultimap.put("param3", "value3");
Set<String> keys = linkedmultimap.keySet();
Iterator<String> mapItereter = keys.iterator();
while(mapItereter.hasNext()) {
String paramKey = mapItereter.next();
List<String> list = linkedmultimap.get(paramKey);
Iterator<String> listItereter = list.iterator();
while(listItereter.hasNext()){
String value = listItereter.next();
System.out.println(paramKey + "=" + value);
}
}
-----
結果
param1=value1
param2=value2-1
param2=value2-2
param2=value2-3
param3=value3