我的问题是无法从我的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个小时后我终于完成了! }
答案 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;
}