Как получить значение из TreeMap в Java?

Моя проблема в том, что я не могу получить объект «Элемент» (значение) из моей карты дерева. Мне нужно отправить эту информацию в мой класс графического интерфейса и отобразить ее в 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 часов я наконец сделал это! }


person rewen    schedule 18.01.2014    source источник
comment
Здесь есть один ответ. stackoverflow.com/questions/16246821 /   -  person Ethan Fang    schedule 18.01.2014
comment
Пожалуйста, опубликуйте код, где вы пытаетесь получить Item.   -  person Christian    schedule 18.01.2014
comment
library.get("01"); не работает?   -  person Elliott Frisch    schedule 18.01.2014
comment
Я считаю, что перечисление было бы более подходящим.   -  person Josh M    schedule 18.01.2014
comment
@Christian У меня есть только этот бит в моем классе графического интерфейса JList tracks = new JList(LibraryData.getLibrary());   -  person rewen    schedule 18.01.2014


Ответы (4)


С этим кодом, который у вас есть:

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

Вы получаете все ключи с карты. Если вам нужны все значения, используйте:

library.values();

Наконец, если вам нужно получить значение по ключу, используйте V get(Object key):

library.get("01");

Что вернет вам первое Item с карты.

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

** РЕДАКТИРОВАТЬ **

Поскольку вам нужны все значения, вы можете сделать это:

library.values().toArray()

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

person yǝsʞǝla    schedule 18.01.2014
comment
Я хочу, чтобы каждая из этих песен попала в JList. Я пытался изменить library.keySet() на library.values(), но потом получаю исключение. Бит кода в графическом интерфейсе: JList tracks = new JList(LibraryData.getLibrary()); - person rewen; 18.01.2014

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

ключ: библиотека.keySet().toArray()[0]

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

ИЛИ (если вам просто нужна ценность)

 library.values().toArray()[0]; 
person Hao Luong    schedule 18.01.2014

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

1. Лучше всего для управления гибкими массивами в Java использовать ArrayLists

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

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

Удачи!

person alesc3    schedule 18.01.2014

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

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

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