2012-06-26 2 views
0

특정 인터페이스를 구현하는 객체 모음이 필요하지만 컬렉션 내의 구체적인 유형 당 하나만 갖고 싶습니다.유형별로 모음 키 지정

collection of implementers of dog: 
- instance of dachshund 
- instance of beagle 
- instance of corgi 

는 .NET에서 "KeyedByTypeCollection"이있다. 자바에서 비슷한 것을 Android에 사용할 수있는 방식으로 존재합니까?

감사합니다.

+0

나는 닷넷 모음에 대한 문서 검토 한 결과 (공개. 나는 구아바에 기여)하고 유용 할 이유 (아마도 싱글 공장 제외) 상상 위해 고군분투하고있다. 그것을 사용하는 이유는 무엇입니까? 어쩌면 당신의 목적에 부합하는 Java에서 뭔가 다른 점이있을 것입니다. –

답변

1

제네릭을 살펴 봐야합니다. 예 : 이 List<Dogs> dogList = new ArrayList<Dogs>();

편집 :이 컬렉션 만의 고유 인스턴스를 가지고, 당신은 당신이 동일한 키를 사용하여 여러 값을 유지하는 사용자 정의 HaspMap 필요하다고 생각 Set<Dogs> dogList = new HashSet<Dogs>();

0

를 사용해야

그래서 HashMap을 확장하고 값을 넣는 간단한 클래스를 만듭니다. 참조 : 이제

public class MyHashMap extends LinkedHashMap<String, List<String>> { 

    public void put(String key, String value) { 
     List<String> current = get(key); 
     if (current == null) { 
      current = new ArrayList<String>(); 
      super.put(key, current); 
     } 
     current.add(value); 
    } 
} 

 MyHashMap hashMap = new MyHashMap(); 
     hashMap.put("dog", "dachshund"); 
     hashMap.put("dog", "beagle"); 
     hashMap.put("dog", "corgi"); 
     Log.d("output", String.valueOf(hashMap)); 

OUTPUT

{dog=[dachshund, beagle, corgi]} 
+0

Neat. 이 방법을 일반화하면 뭔가를 살 수 있다고 생각합니다. – iozee

0

이 당신을 위해 무엇을 찾고있는 수 있습니다, MyHashMap의 인스턴스를 생성하고 아래에에 값을 넣어 코드의 주석

에서 System.out.println 라인의

출력이 될 것 같은 뭔가 :

타사 라이브러리를 사용하고자하는 경우
class test.Beagle 
class test.Dachshund 
+0

'dogMap.values ​​()'는 원하는 컬렉션이므로 추가 세트가 필요 없습니다. 또한 클래스에 제네릭 매개 변수를 추가합니다.'Map , 개>'를 확장합니다. –

2

- 당신이 질서를 유지 걱정하지 않는 경우 - Guava'sClassToInstanceMap이 여기에 해당됩니다.

ClassToInstanceMap<Dog> map = MutableClassToInstanceMap.create(); 
map.putInstance(Corgi.class, new Corgi("Spot")); 
map.putInstance(Beagle.class, new Beagle("Lady")); 
Corgi corgi = map.getInstance(Corgi.class); // no cast required 

:

+0

가능한 한 이식성을 유지하고 싶습니다. 특히 안드로이드에서 내 라이브러리 사용을 고려하고 있기 때문에 특히 그렇습니다. 고마워요 :) –

+1

어? 구아바는 Android와 100 % 호환됩니다. 사실, 안드로이드 코어 라이브러리에서 일하는 사람들 중 일부는 구아바에서 일합니다 ... –

+1

... 사실, Guava의 [가장 일반적인 의존성] 중 하나 (http://www.appbrain.com/stats/) 라이브러리/세부 정보/구아바/google-guava). APK 크기가 걱정된다면 [해결 방법이 있습니다] (https://code.google.com/p/guava-libraries/wiki/UsingProGuardWithGuava). –

관련 문제