2013-02-10 3 views
3

여러 맵으로 맵핑 구현을 검색합니다. 나는 Apache Commons을 알고 있지만 그것은 나를 만족시키지 못한다.다중 키 맵 및 부분 쿼리

하나의 키를 전달하고 전달 된 키를 포함하는 모든 항목을 가져올 수 있기를 원합니다.

MultiKeyMap mkm = new MultiKeyMap(); 
mkm.put("key1", "key2", "key3", "1"); 
mkm.put("key1", "key22", "key33", "2"); 
mkm.put("key12", "key22", "key32", "3"); 

mkm.get("key1"); 

NULL을 반환하지만,이 경우에 나는 "1"싶어하고 "2" 내 자신의 구현은 옵션이 아닙니다. 나는 내가 신뢰할 수있는 것을 사용하고 싶다.

+1

MultiKeyMap이 아니라 [MultiMap] (http://commons.apache.org/collections/apidocs/index.html?org/apache/commons/collections/map/MultiKeyMap.html)이라고 생각합니다. – nhahtdh

+0

[guice] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html)를 확인하십시오. 당신의 예제에 약간의 문제가 있습니다 - 앞에서 언급 한 guice-Multimap은 한 번에 하나의 키만 사용할 때만 제대로 작동합니다. 예제에서와 같이 mkm.put ("key1", "key2", "key3", "1");'. 그렇지 않으면 MultiMap이 잘 동작 할 것이라고 생각합니다. 동일한 패키지에서 다른지도를 한꺼번에 얻을 수 있습니다. 찾을 수없는 경우 어디에서나 찾을 수 있습니다.) –

답변

3

나는 구아바에 table.get(key1) 또는 table.get(key2) 또는 table.get(key1, key2)을 할 수있는 테이블 구현 Table<Key1,Key2,Value>이 있다고 생각합니다. 테이블 당 2 개의 키만 지원한다고는하지만 확실하지는 않습니다. 그걸 보길 원할 겁니다.

Guava Table javadoc

1

난 당신이 각각의 키에 대해 한 번, 값을 여러 번 주위의 ​​요구 사항을 켜고 넣을 수 있습니다 경우 HashMap

HashMap<String, ArrayList<String>> map = new HashMap<>(); 
    ArrayList<String> ls=new ArrayList<>(); 
    ArrayList<String> ls2=new ArrayList<>(); 
    ls.add("key3"); 
    ls.add("1"); 
    ls.add("key2"); 
    ls.add("key22"); 
    ls.add("key33"); 
    ls.add("2"); 

    ls2.add("key22"); 
    ls2.add("key32"); 
    ls2.add("3"); 

    map.put("key1",ls); 
    map.put("key12", ls2); 

    map.get("key1"); 
0

이 할 수 있다고 생각하고 Guava's MultiMap는 사용하기 아주 좋은 :

Multimap<String, String> map = HashMultimap.create(); 
    map.put("key1", "1"); 
    map.put("key2", "1"); 
    map.put("key3", "1"); 

    map.put("key1", "2"); 
    map.put("key22", "2"); 
    map.put("key33", "2"); 

    map.put("key12", "3"); 
    map.put("key22", "3"); 
    map.put("key32", "3"); 

    Collection<String> values = map.get("key1"); 
    System.out.println(values); 

인쇄

[2, 1]