2010-01-12 68 views
4

我有一個類包裝TreeMap的MyMap。 (說它是狗的集合,並且鑰匙是琴絃)。如何爲TreeMap和HashMap(Java)創建一個可迭代的包裝器?

public class MyMap { 
    private TreeMap<String, Dog> map; 
... 
} 

我想將MyMap的iterable與for-each循環。我知道我會怎麼做了,如果我的班是一個LinkedList包裝:

public class MyList implements Iterable<Dog> { 
    private LinkedList<Dog> list; 
    ... 
    public Iterator<Dog> iterator() { 
     return list.iterator(); 
    } 
} 

但由於TreeMap中沒有一個迭代器這樣的解決方案不適用於TreeMap的工作()。那麼我怎樣才能讓MyMap迭代?

而除了MyMap以外,同樣的問題包裝HashMap(而不是TreeMap)。

謝謝。所以

for(Object value : mymap.values() ){ 
    System.out.println(value); 
} 

,就是我的建議是:

+0

聽起來好像你在問:「我如何迭代TreeMap的值,按照相應的鍵順序?」這是一個簡潔的描述嗎? – 2010-01-12 20:47:22

+0

@ Alex- No.問題是當MyMap是我創建的一個具有TreeMap字段的類時,如何將MyMap轉換爲可迭代的。我希望它可以迭代TreeMap字段的值(按照相應的鍵順序)。順便說一句:這個問題得到解答。 – snakile 2010-01-12 21:41:03

+0

如果問題得到解答,爲什麼它不是以這種方式標記的? – PSpeed 2010-01-13 01:05:22

回答

8
public Iterator<Dog> iterator() { 
     return map.values().iterator(); 
} 
+0

我不確定你的答案能解決我的問題。我不太明白。無論如何,我沒有擴展TreeMap。 TreeMap是我班的一個領域。我編輯了我的問題,使其更清楚。 – snakile 2010-01-12 19:37:02

+1

那麼'map.values()。iterator()'會給你一個遍歷你的映射值的迭代器! – 2010-01-12 19:38:53

+0

@john - OK,那麼'MyMap'應該定義一個'iterator()'方法來返回'_map.entrySet()。iterator()' – kdgregory 2010-01-12 19:51:59

6

這是因爲你只能重複鍵或地圖的值,而不是地圖本身

通常你能做到這一點呢你的地圖需要迭代?不是,如果你只是想獲得價值......或鑰匙本身。

此外,如ForwardingList

+0

你是什麼意思?我想要的是迭代我的地圖的值。我怎樣才能做到這一點? – snakile 2010-01-12 19:25:25

+0

'values()。iterator()' – 2010-01-12 19:32:48

+0

我提高了你的一個,因爲我認爲它比嘗試子類化'TreeMap'等更正確的答案。但是,您也可以迭代地圖的條目,這通常是迭代地圖的最有用的方法。 – 2010-01-12 19:33:12

1

一種可能性可以定義一個entrySet()方法返回一組,然後遍歷設置考慮使用谷歌的轉發收藏。

對於-每次迭代會是這個樣子:

for (Map.Entry<String,Integer> m: someMap.entrySet()){ 
    System.out.println("Key="+m.getKey()+" value="+m.getValue()); 
} 
4
public class MyMap implements Iterable<Dog> { 
    private TreeMap<String, Dog> map; 
    ... 
    @Override 
    public Iterator<Dog> iterator() { 
     return map.values().iterator(); 
    } 
} 

map.values()是包含在地圖中的狗的集合視圖。集合的迭代器將按照它們相應的鍵出現在樹中的順序返回值。 感謝Jonathan Feinberg。

+2

+1提及「implements Iterable 」接口。 – I82Much 2010-01-12 21:11:44