Få et underkort fra et HashMap i Java
1. Oversigt
I vores tidligere selvstudie, A Guide to Java HashMap, viste vi, hvordan man bruger HashMap i Java.
I dette korte selvstudie lærer vi hvordan man får et underkort fra en HashMap baseret på en liste over nøgler.
2. Brug Java 8 Stream
Antag for eksempel, at vi har et HashMap og en liste over nøgler:
Map<Integer, String> map = new HashMap<>();
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
map.put(4, "D");
map.put(5, "E");
List<Integer> keyList = Arrays.asList(1, 2, 3);
Vi kan bruge Java 8-streams til at få et underkort baseret på keyList :
Map<Integer, String> subMap = map.entrySet().stream()
.filter(x -> keyList.contains(x.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(subMap);
Outputtet vil se sådan ud:
{1=A, 2=B, 3=C}
3. Brug retainAll() Metode
Vi kan få kortets nøglesæt og brug retainAll() metode til at fjerne alle poster, hvis nøgle ikke er i keyList :
map.keySet().retainAll(keyList);
Bemærk, at denne metode vil redigere det originale kort . Hvis vi ikke ønsker at påvirke det originale kort, kan vi oprette et nyt kort først ved hjælp af en kopikonstruktør af HashMap :
Map<Integer, String> newMap = new HashMap<>(map);
newMap.keySet().retainAll(keyList);
System.out.println(newMap);
Outputtet er det samme som ovenfor.
4. Konklusion
Sammenfattende har vi lært to metoder til at få et underkort fra en HashMap baseret på en liste over nøgler.