Rendezzen egy HashMap-ot Java-ban
1. Bemutatkozás
Ebben a gyors bemutatóban megtanuljuk, hogyan kell olyasmi HashMap Java-ban.
Pontosabban a válogatást vizsgáljuk meg HashMap bejegyzéseket kulcsuk vagy értékük alapján a következők segítségével:
- TreeMap
- Tömb lista és Collections.sort ()
- TreeSet
- Használni a Folyam API, és végül,
- Használni a Gujávafa könyvtár
2. Használja a TreeMap
Mint tudjuk, kulcsok TreeMap természetes rendjük szerint válogatják. Ez jó megoldás, ha a kulcs-érték párokat a kulcsuk szerint akarjuk rendezni. Tehát az ötlet az, hogy minden adatot kitolunk a mi adatunkból HashMap ba,-be TreeMap.
Kezdetnek definiáljuk a HashMap és inicializálja néhány adattal:
Térképtérkép = új HashMap (); Alkalmazott alkalmazott1 = új alkalmazott (1L, "Mher"); map.put (alkalmazott1.getNév (), alkalmazott1); Alkalmazott alkalmazott2 = új alkalmazott (22L, "Annie"); map.put (alkalmazott2.getNév (), alkalmazott2); Alkalmazott alkalmazott3 = új alkalmazott (8L, "John"); map.put (alkalmazott3.getName (), alkalmazott3); Alkalmazott alkalmazott4 = új alkalmazott (2L, "George"); map.put (alkalmazott4.getName (), alkalmazott4);
A Munkavállaló osztály, vegye figyelembe, hogy megvalósítottuk Hasonló:
public class Alkalmazotti eszközök összehasonlítható {private Long id; privát karakterlánc neve; // konstruktor, getters, seters // felülírja az egyenlőt és hashCode @Orride public int CompareTo (Munkavállalói alkalmazott) {return (int) (this.id - alkalmazott.getId ()); }}
Ezután tároljuk a bejegyzéseket a TreeMap konstruktora segítségével:
TreeMap rendezve = new TreeMap (térkép);
Vagy a putAll módszer az adatok másolására:
TreeMap rendezve = new TreeMap (); sorted.putAll (térkép);
És ez az! Annak érdekében, hogy a térképbejegyzéseink kulcsok szerint legyenek rendezve, nyomtassuk ki őket:
Annie = alkalmazott {id = 22, név = "Annie"} George = alkalmazott {id = 2, név = "George"} John = alkalmazott {id = 8, név = "John"} Mher = alkalmazott {id = 1, név = "Mher"}
Mint látjuk, a kulcsok természetes sorrendben vannak rendezve.
3. Használata Tömb lista
Természetesen a térkép bejegyzéseit rendezhetjük a segítségével Tömb lista. A legfontosabb különbség az előző módszerrel szemben az nem tartjuk fenn a Térkép interfész itt.
3.1. Rendezés kulcs szerint
Töltsük be a beállított kulcsot egy Tömb lista:
List workerByKey = new ArrayList (map.keySet ()); Gyűjtemények.rendezés (workerByKey);
És a kimenet:
[Annie, George, John, Mher]
3.2. Rendezés érték szerint
Most mi van, ha a térképi értékeket a id területe Munkavállaló tárgy? Használhatunk egy Tömb lista arra is.
Először másoljuk az értékeket a listába:
List workerById = new ArrayList (map.values ());
És ezek után válogatjuk:
Gyűjtemények.rendezés (workerById);
Ne feledje, hogy ez azért működik, mert Munkavállaló végrehajtja a Hasonló felület. Ellenkező esetben meg kell határoznunk egy kézi összehasonlítót a híváshoz Gyűjtemények.rendezés.
Az eredmények ellenőrzéséhez kinyomtatjuk a workerById:
[Alkalmazott {id = 1, név = "Mher"}, Alkalmazott {id = 2, név = "George"}, Alkalmazott {id = 8, név = "John"}, Alkalmazott {id = 22, név = "Annie "}]
Amint látjuk, az objektumok azok szerint vannak rendezve id terület.
4. A TreeSet
Abban az esetben, ha mi ne akarjon duplikált értékeket elfogadni a válogatott gyűjteményünkben, van egy szép megoldás a TreeSet.
Először adjunk hozzá néhány másolatot a kezdeti térképünkhöz:
Alkalmazott alkalmazott5 = új alkalmazott (1L, "Mher"); map.put (alkalmazott5.getName (), alkalmazott5); Alkalmazott alkalmazott6 = új alkalmazott (22L, "Annie"); map.put (alkalmazott6.getName (), alkalmazott6);
4.1. Rendezés kulcs szerint
A térkép fő bejegyzéseinek rendezése:
SortedSet keySet = új TreeSet (map.keySet ());
Nyomtassuk ki a keySet és nézze meg a kimenetet:
[Annie, George, John, Mher]
Most a térképkulcsokat a másolatok nélkül rendeztük.
4.2. Rendezés érték szerint
Hasonlóképpen, a térképi értékek esetében a konverziós kód a következőképpen néz ki:
SortedSet értékek = new TreeSet (map.values ());
És az eredmények:
[Alkalmazott {id = 1, név = "Mher"}, Alkalmazott {id = 2, név = "George"}, Alkalmazott {id = 8, név = "John"}, Alkalmazott {id = 22, név = "Annie "}]
Mint láthatjuk, a kimenetben nincsenek másolatok. Ez az egyedi objektumokkal működik, amikor felülírjuk egyenlő és hash kód.
5. Lambdas és Streamek használata
A Java 8 óta használhatjuk a Stream API és a lambda kifejezéseket a térkép rendezéséhez. Csak arra van szükségünk, hogy felhívjuk a válogatott módszer a térképen folyam csővezeték.
5.1. Rendezés kulcs szerint
Kulcs szerinti rendezéshez a összehasonlítvaByKey összehasonlító:
map.entrySet () .stream () .sorted (Map.Entry.comparingByKey ()) .forEach (System.out :: println);
A végső az egyes szakasz kinyomtatja az eredményeket:
Annie = Alkalmazott {id = 22, név = "Annie"} George = Alkalmazott {id = 2, név = "George"} John = Alkalmazott {id = 8, név = "John"} Mher = Alkalmazott {id = 1, név = "Mher"}
Alapértelmezés szerint a rendezési mód növekvő.
5.2. Rendezés érték szerint
Természetesen a Munkavállaló tárgyak is:
map.entrySet () .stream () .sorted (Map.Entry.comparingByValue ()) .forEach (System.out :: println);
Amint látjuk, a fenti kód kinyomtatja a térképet, a rendezés szerint id mezői Munkavállaló tárgyak:
Mher = Munkavállaló {id = 1, név = "Mher"} George = Munkavállaló {id = 2, név = "George"} John = Munkavállaló {id = 8, név = "John"} Annie = Munkavállaló {id = 22, név = "Annie"}
Ezenkívül összegyűjthetjük az eredményeket egy új térképre:
Térkép eredménye = map.entrySet () .stream () .sorted (Map.Entry.comparingByValue ()) .collect (Collectors.toMap (Map.Entry :: getKey, Map.Entry :: getValue, (oldValue, newValue) - > oldValue, LinkedHashMap :: new));
Ne feledje, hogy eredményeinket a LinkedHashMap. Alapértelmezés szerint, Gyűjtők.térképbe új HashMap-ot ad vissza, de mint tudjuk, HashMap nem garantálja az iterációtrendelés, míg LinkedHashMap csinál.
6. Guava használata
Végül egy könyvtár, amely lehetővé teszi számunkra a válogatást HashMap az Guava. Mielőtt elkezdenénk, hasznos lesz ellenőrizni a guavai térképekről szóló írásunkat.
Először nyilvánítsunk ki egy Rendelés ahogy rendezni akarjuk a térképünket MunkavállalóiId terület:
Rendelés naturalOrdering = Rendelés.natural () .onResultOf (Functions.forMap (térkép, null));
Most már csak a használatra van szükségünk ImmutableSortedMap az eredmények szemléltetésére:
ImmutableSortedMap.copyOf (térkép, természetesOrdering);
És még egyszer: a kimenet a. Által rendelt térkép id terület:
Mher = Munkavállaló {id = 1, név = "Mher"} George = Munkavállaló {id = 2, név = "George"} John = Munkavállaló {id = 8, név = "John"} Annie = Munkavállaló {id = 22, név = "Annie"}
7. Összegzés
Ebben a cikkben áttekintettük a rendezés számos módját HashMap kulcs vagy érték szerint.
És alaposan megvizsgáltuk, hogyan tehetjük ezt meg, amikor az attribútum egy egyéni osztály a megvalósítással Hasonló.
Végül, mint mindig, a vita során használt kód megtalálható a GitHubon.