Sortowanie TreeMap po wartościach z innego TreeMap.

0

Witam, mam taki problem.
Posiadam taki TreeMap:

TreeMap <String,Integer> treeMap = new TreeMap();
TreeMap <String,Integer> treeMap2 = new TreeMap();
treeMap2.putAll(treeMap);

I chciałbym, żeby w treeMap2 klucze były posortowane po wartości Integer z mapy pierwszej. Czyli np, w mapie pierwszej mam:

 
Andrzej      2000
Eugeniusz   8000
Piotrek       5000
Zenon        1000

To w drugiej będzie:

 
Eugeniusz   8000
Piotrek       5000
Andrzej      2000
Zenon        1000

Podejrzewam coś, że jakoś trzeba napisać komparator, ale komparator ciągle przekazuje do funkcji compare imiona, a nie mając dostępu do wartości nie ma możliwości tego posortować ;/ Być może ja coś robię źle, ale próbowałem napisać ten komparator na różne sposoby, i zawsze zwraca mi tą pierwszą kolumnę do funkcji porównawczej.
Z góry dzięki za pomoc.

0

Twój pomysł jest generalnie sprzeczny z ideą map jednokierunkowych.

Musisz przeiterować po treeMap.entrySet() i dodać odwrócone pary do drugiej mapy.

0

druga mape zadeklaruj jako <Integer, String> i zamiast uzywac putAll napisz sobie metode:

for (String s : treemap.keySet()) {
  treemap2.put(treemap.get(s), s);
}

//@up: jeszcze lepsze rozwiazanie ;)

To zadziala oczywiscie tylko wtedy, gdy pensje sa unikalne w zbiorze.
W innym wypadku po prostu skorzystaj z innej struktury (np Vector, Lista, itp) i przechowuj tam klasy, ktore w sobie przechowuja Imie i Pensje i do tego napisz Comparator.

0

Goggle Collections i BiMap? Zalozenie jest ze i klucze i wartosci sa unikalne, ale kod z pierwszego posta wskazuje ze tak jest.

0

Dzieki wielkie za podpowiedzi, jednak chyba nie będę tego w stanie zrobić, bo wiele wartości się pokrywa (nie mogę tego przewidzieć nawet). Spróbuję to przepisać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1