2012年2月2日木曜日

LinkedMultiMap

HTTPリクエストのパラメータを保持したい場合に、HashMapなどの連想配列を使うことが多いと思いますが、以下のようなパラメータの場合、HashMapが重複キーを許さないため、param2をうまく保持できないときがあります。

param1=value1&param2=value2-1&param2=value2-2&param2=value2-3&param3=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

1 件のコメント: