如何从Java中获取TreeMap的价值?

时间:2014-01-18 02:11:28

标签: java arrays jlist treemap

我的问题是无法从我的Treemap获取对象“Item”(值)。我需要将该信息发送到我的GUI类并在JList中显示以获得选择列表,因此可以轻松选择并添加歌曲到播放列表,但只有我得到的输出是“01,02,03,04,05” (键)。请帮助,因为我是初学者,不知道该怎么做。

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;
}

解决方案:

因为我要将值传递给另一个类:

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

我做了类似的事情并且有效

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

谢谢你们,10个小时后我终于完成了!     }

4 个答案:

答案 0 :(得分: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需要一个Object的数组或向量,所以这应该可行。

答案 1 :(得分:0)

如果您希望获得价值和按位置键,您可以使用:

key:library.keySet()。toArray()[0]

value:library.get(key);

OR(如果你只想要价值)

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

答案 2 :(得分:0)

您可以使用ArrayList

1 - Java中灵活阵列管理的最佳方法是使用ArrayList s

2 - ArrayList很容易添加,获取,删除以及更多内容。

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);

祝你好运!

答案 3 :(得分:0)

我正在返回一个字符串值列表作为treemap值。使用的方法是

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

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