komparator / splaszcenie mapy dwoch roznych typow ?

0

Witam drodzy forumowicze.
Mam następujący problem.
Posiadam klasę - > ktora ma pola typu String i Integer.

W maine mam hashmape -> przechowuje typy powyższej klasy, czyli String i integer.
Teraz chciałbym posortować tą mapę względem Stringa używając komparatora.

Oto moj kod:

 public class Morze {
    
    
    String nazwa;
    int pow;
    
    public Morze(String nazwa, int pow ) {
        this.nazwa = nazwa;
        this.pow = pow;
    }
    
    public String toString(){
        return nazwa + " ma powierzchnie: " + pow;
    }
    
    public String getNazwa(){
        return nazwa;
    }
}

to jest klasa morze - ona jest mało istotna w moim problemie. A to jest main:

 
static class CompareMorzeName implements Comparator<Morze> {

        @Override
        public int compare(Morze m1, Morze m2) {
            return m1.getNazwa().compareTo(m2.getNazwa());
        }
        
    }
    

    public static void main(String[] args) {

       
        
/////////////      Pobierz z tej mapy do oddzielnej kolekcji wszystkie morza     ///////////////        
       
        Map<String, Integer> mapaMorza = new HashMap<String, Integer>();
        
        
        for(Entry<Morze, Rzeka> pary : hashMap.entrySet() ) {
            mapaMorza.put( pary.getKey().nazwa , pary.getKey().pow );
        }
        
        System.out.println("\n Wyciagniete morza: \n");
        
        for(Entry<String, Integer> paryMorza : mapaMorza.entrySet() ) {
            System.out.println(paryMorza.getKey() + ": " + paryMorza.getValue());
        }
        
        
/////////////       Splaszczenie mapy 'mapaMorza' -> do listy       ////////////////////////////
        
        List<String> nazwyMorz = new ArrayList<String>();
        
        for(Entry<String, Integer> pary : mapaMorza.entrySet() ) {
            
        }
** ????????????????????????????????? **   
        
///////////         Sortowanie mórz alfabetycznie       ////////////////////////////
        
        Collections.sort(splaszczonaMapaMorza, new CompareMorzeName());
        
        
        **?????????????????? chyba nie mozna wykonac tej operacji bo mamy string i int... dla mapy o kluczach i wartosciach tego samego typu by zadziałało..**
    }
}

I teraz moje pytanko, jak za pomocą mojego zaimplementowanego komparatora posortować mapę Morza ? <String, Integer> ?? Na dodatek Collections.sort moge wykorzystac tylko dla interfejsu Listy :( a mapy juz nie.
Jakieś pomysły ??

0

Np to działa:
List<Morze> nazwyMorz = new ArrayList<Morze>();

    nazwyMorz.add(new Morze("azwa" , 1 ));
    nazwyMorz.add(new Morze("zwa" , 1 ));
    nazwyMorz.add(new Morze("bazwa" , 1 ));
    nazwyMorz.add(new Morze("cnazwa" , 1 ));
    nazwyMorz.add(new Morze("dazwa" , 1 ));

Collections.sort(nazwyMorz, new CompareMorzeName());

Tylko, że to są utworzone nowiutkie obiekty. Istnieje w ogóle sposób by przejsc z HashMapy typu przykladowo <String,Integer> na liste ? Coś nie mogę wpaść na pomysł...

0

Ale WTF? Żeby móc posortować coś tym twoim komparatorem to to musiałaby być kolekcja obiektów Morze, to chyba dość oczywiste. Więc splaszczonaMapaMorza to powinna być List<Morze>. Zresztą nie pojmuje czemu w ogóle masz tam mapę a nie listę obiektów Morze.

0

No takie sobie znalazłem zadanko...mam hashmape<Morze,Rzeka>
Wyciagam Morze do nowej hashmapy<String,Integer> - teraz mam same morza...
teraz chciałbym posortowac wzgledem nazwy morza. Ale żeby wykorzystac Collections.sort....to musze posiadac Liste<Morze>. Ok deklaruje ją...ale nie wiem jak przepisać z hashmapy <String,Integer> do Listy<Morze>

1

Czy ty sobie robisz teraz jaja ze mnie? Masz mapę Morze -> Rzeka z której wyciągasz TYLKO parametry morza. Czemu w takim razie nie wyciągniesz po prostu listy mórz? o_O

List<Morze> morza = new ArrayList<Morze>(hashMap.keySet());

i volia, masz już listę mórz bez żadnych dziwnych map

0

Chłopie, to jest genialne :-)
Dziękuję za pomoc :-)
usunąłem swoije 20 linijek kodu by skorzystać z twojego poprawnego...który zajmuje zaledwie linijke :)

0

Nie chce ci się już drugi raz usprawiedliwiać....ale w żadnym tutorialu anie na wykladzie nie widziałem takiego zapisu:
.....new ArrayList<Cos>(i jeszcz tu coś ????????????).
Nie mnie jednak dziękuję za pomoc :) Temat zakończony :)

0

Bo trzeba czytać dokumentację... Zresztą nie rozumiem co jest w tym "zapisie" dziwnego skoro to jest zwykły argument konstruktora...

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