2014-01-18 6 views
2

Моя проблема не может получить объект «Предмет» (значение) из моей Treemap. Мне нужно отправить эту информацию в мой класс GUI и отобразить ее в JList, чтобы получить список выбора, поэтому вы можете легко выбирать и добавлять песни в список воспроизведения, но только то, что я получаю в качестве вывода, - «01, 02, 03, 04, 05», (ключ). Пожалуйста, помогите, потому что я начинаю и понятия не имею, что делать.Как получить значение из TreeMap в Java?

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 часов я, наконец, сделал это! }

+1

Здесь есть один ответ. http://stackoverflow.com/questions/16246821/how-to-get-values-keys-from-hashmap –

+0

Пожалуйста, напишите код, в котором вы пытаетесь получить 'Item'. – 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 с карты.

Не совсем понятно, какой из них вы хотите, но в основном это варианты.

** EDIT **

Так как вы хотите, чтобы все значения, которые вы можете сделать это:

library.values().toArray() 

JList ожидает массив или вектор объекта, так что это должно работать.

+0

Я хочу получить каждую из этих песен в JList. Я пытался изменить 'library.keySet()' на 'library.values ​​()', но потом я получаю исключение. Бит кода в GUI: 'JList tracks = new JList (LibraryData.getLibrary());' – rewen

0

Если вы хотите, чтобы получить значение и ключ на позиции, вы можете использовать:

ключ: library.keySet() ToArray() [0]

значение:. Library.get (ключ);

ИЛИ (если вы просто хотите значение)

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

Вы можете использовать ArrayList:

1 - Лучший для гибкого массива управляющего в Java используется ArrayList s

2 - ArrayList s легко добавить, получить, удалить и многое другое.

3 - Treemap s немного ... произвольно. Я говорю, что если вы используете метод get(Object o) из Treemap, то 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

Я возвращал список строковых значений как значение treemap. Используемый подход:

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

    TreeSet<String> names= result.get(key); 
    for(String contactName: names){ 
     print contactName; 
    } 
Смежные вопросы