2014-01-18 47 views
2

我的問題是無法從我的Treemap中獲取對象「Item」(value)。我需要將這些信息發送到我的GUI類,並將其顯示在JList中以獲得選擇列表,因此可以輕鬆地選擇歌曲並將其添加到播放列表中,但只有我輸出的內容是「01,02,03,04,05」 (鍵)。請幫忙,因爲我是初學者,不知道該怎麼做。如何從Java中的TreeMap獲取值?

public class LibraryData { 

private static class Item { 


    Item(String n, String a, int r) { 
     name = n; 
     artist = a; 
     rating = r; 
    } 

    // instance variables 
    private String name; 
    private String artist; 
    private int rating; 
    private int playCount; 

    public String toString() { 
     return name + " - " + artist; 
    } 
} 


private static Map<String, Item> library = new TreeMap<String, Item>(); 


static { 
    library.put("01", new Item("How much is that doggy in the window", "Zee-J", 3)); 
    library.put("02", new Item("Exotic", "Maradonna", 5)); 
    library.put("03", new Item("I'm dreaming of a white Christmas", "Ludwig van Beethoven", 2)); 
    library.put("04", new Item("Pastoral Symphony", "Cayley Minnow", 1)); 
    library.put("05", new Item("Anarchy in the UK", "The Kings Singers", 0)); 
} 


public static String[] getLibrary() { 
String [] tempa = (String[]) library.keySet().toArray(new String[library.size()]); 
return tempa; 
} 

SOLUTION:

,因爲我的價值觀傳遞給另一個類:

JList tracks = new JList(LibraryData.getLibrary()); 

我做類似的東西,它的工作原理

public static Object[] getLibrary() { 
Collection c = library.values(); 
return c.toArray(new Item[0]); 

謝謝你們,10個小時後我終於做到了! }

+1

這裏有一個答案。 http://stackoverflow.com/questions/16246821/how-to-get-values-keys-from-hashmap –

+0

請發佈代碼,你正試圖獲得'項目'。 – Christian

+0

'library.get(「01」);'不工作? –

回答

2

有了這個代碼,您有:

String [] tempa = (String[]) library.keySet().toArray(new String[library.size()]); 

您都可以從地圖上的所有按鍵。如果你想所有的值,然後使用:

library.values(); 

最後,如果你需要通過密鑰使用V get(Object key)得到一個值:

library.get("01"); 

將返回你的第一Item從地圖。

這是不是很清楚你想要哪一個,但基本上這些是選項。

**編輯**

既然你想要的所有值,你可以這樣做:

library.values().toArray() 

JList的預計數組或對象的矢量所以這應該工作。

+0

我想將每個這些歌曲放到JList中。我試圖將'library.keySet()'更改爲'library.values()',但後來我得到異常。 GUI中的代碼位是:'JList tracks = new JList(LibraryData.getLibrary());' – rewen

0

如果你想獲得的位置值和密鑰,您可以使用:

鍵:library.keySet()指定者()[0]

值:library.get(鍵);

OR(如果你只想值)

library.values().toArray()[0]; 
0

可以使用ArrayList

1 - 最好的柔性陣列在Java中管理使用ArrayList小號

2 - ArrayList s很容易添加,獲取,刪除等等。

3 - Treemap s有點...任意。我所說的是,如果你使用樹形圖中的get(Object o)方法,那麼Object o必須是一個關鍵字,這是不太靈活的。

如果你想他們,使用此代碼:

import java.util.ArrayList; 
import com.example.Something; // It can be ANYTHING 
//... 
ArrayList<Something> somethingList = new ArrayList<Something>(); 
//... 
somethingList.add(new Something("string", 1, 2.5, true)); 
//... 
boolean isSomething = somethingList.get(somethingList.size() - 1); // Gets last item added 
//... 
int listSize = somethingList.size(); 
//... 
somethingList.remove(somethingList.size() - 1); // Removes last item and decrements size 
//... 
Something[] nativeArray = somethingList.toArray(new Something[somethingList.size()]); // The parameter is needed or everthing will point to null 
// Other things... 

還是經典Treemap

Object keyAtIndex0 = library.keySet.toArray(new Object[library.size()])[0]; 
Object value = library.get(keyAtIndex0); 

祝您好運!

0

我正在返回一個字符串值列表作爲樹形圖值。使用的方法是

private Map<String, TreeSet<String>> result; 

    TreeSet<String> names= result.get(key); 
    for(String contactName: names){ 
     print contactName; 
    }