Ostatni dwuetapowy cykl na temat kolekcji! Zainteresujemy się teraz trzecią odmianą popularnej struktury danych jaką jest mapa! Przedstawię Wam jak funkcja "mapOf" w języku Kotlin może zrealizować utworzenie mapy niemodyfikowalnej!
Tweet |
"MAPOF" W JĘZYKU KOTLIN UTWORZY DLA CIEBIE MAPĘ NIEMODYFIKOWALNĄ!
Słyszeliście kiedyś o takiej kolekcji w języku Java jaką jest "HashMap"? Jeśli tak, to już macie pełen obraz o co będzie się rozchodzić. Mapa to struktura danych przeznaczona do składowania par typu "klucz-wartość". Każda wartość jest "podpięta" do odpowiedniego klucza, a typy kluczy i wartości mogą być dowolne (wynika to jasno ze stosowania typów generycznych). Próbując mądrze mówić przy ludziach na temat map, pamiętajcie o istotnej zależności. Wartości MOGĄ się powtarzać, ale klucze już NIE!
TWORZENIE INSTANCJI MAPY NIEMODYFIKOWALNEJ
Wystarczy "mapOf" w języku Kotlin, aby otrzymać świeżutką instancję mapy niemodyfikowalnej. Jednak tym razem, wprowadzamy argumenty inaczej. Ten artykuł choć trochę będzie bardziej oryginalny:
val literals = mapOf('M' to 1000, 'D' to 500, 'C' to 100, 'L' to 50, 'X' to 10, 'V' to 5, 'I' to 1)
Aby prawidłowo przypisać parę klucz-wartość, trzeba najpierw podać wartość klucza (od tego momentu nadajemy także typ klucza), wstawić słowo kluczowe "to" i podać "wartość wartości" (nadając typ wartości jakie mają występować).
A jeśli chodzi o ścisłość, to jest przykład przyporządkowania liczby w systemie dziesiętnym do liczby w systemie rzymskim. Moim zdaniem idealnie pasujący przykład do skorzystania z mapy. Typem klucza jest znak ("Char"), a wartości, liczba całkowita ("Int"). Stąd typ całego obiektu będzie określony jako "Map<Char, Int>". Zwróćcie uwagę na DWA typy wewnątrz nawiasów kątowych oddzielone przecinkami!
val literals: Map<Char, Int> = mapOf('M' to 1000, 'D' to 500, 'C' to 100, 'L' to 50, 'X' to 10, 'V' to 5, 'I' to 1)
ZESTAW PRZYKŁADOWYCH METOD MAPY NIEMODYFIKOWALNEJ
Jak zwykle zaprezentuję przykłady metod jakimi dysponuje "mapOf" w języku Kotlin.
CONTAINSKEY
"Czy mapa zawiera klucz X"? Na takie pytanie może Wam odpowiedzieć metoda "containsKey". Wystarczy w parametrze wskazać o jaki klucz Wam chodzi i wartość boolowska zwracana z metody sama "powie" czy udało się znaleźć taki klucz, czy nie.
println(literals.containsKey('G'))
CONTAINSVALUE
Tak samo można zrobić w stosunku do poszukiwanej wartości. "mapOf" w języku Kotlin to oferuje. Korzystacie wtedy z "containsValue"! Wpisujemy wartość odpowiedniego typu w miejsce parametru i naszym oczom ukaże się zwrot wartości logicznej, tak jak powyżej:
println(literals.containsValue(87))
Uważajcie! Jeżeli klucz nie zostanie znaleziony, który przechowuje szukaną wartość, dojdzie do zgłoszenia wyjątku!
GET
Pobieranie wartości po podaniu odpowiadającego mu klucza? Proszę bardzo! Stosując metodę "get", wprowadzamy za parametr występujący w mapie klucz i na wyjściu otrzymujemy wartość klucza...
println(literals.get('F'))
...lub wartość "null" jeśli wskazany klucz nie istnieje! Informuję, że możecie skorzystać z notacji indeksowej jaką często widać w języku Lua. Chodzi mi o taki manewr:
println(literals['F'])
Bardzo przypomina tablicę, nieprawdaż?
"mapOf" tworzy kolekcję niemodyfikowalną zwaną "mapą". Jest zdolna do przechowywania par "klucz-wartość".
Podsumowując. Mapa kryje się pod wywołaniem funkcji "mapOf" w języku Kotlin. Posiada w sobie pary klucz-wartość. Klucz nie może się powtarzać, a wartość jak najbardziej. Dodawanie nowej pary składa się z czterech kroków:
- wstaw klucz dowolnego typu
- wstaw słowo kluczowe "to"
- wstaw wartość dowolnego typu
- powtórzyć (ewentualnie)
Mapa modyfikowalna może dodatkowo zmieniać swoją zawartość po jej zainicjowaniu.