net.ranides.assira.collection.map
Class MapAdapter<K,VS,VT>

java.lang.Object
  extended by net.ranides.assira.collection.map.MapAdapter<K,VS,VT>
Type Parameters:
K - klucz
VT - format publiczny, udostępniany konsumentowi
VS - wewnętrzny format danych
All Implemented Interfaces:
Map<K,VT>, Function<VT,Map.Entry<K,VS>>
Direct Known Subclasses:
MapAdapterTT, MapBiAdapter

public abstract class MapAdapter<K,VS,VT>
extends Object
implements Map<K,VT>, Function<VT,Map.Entry<K,VS>>

Klasa abstrakcyjna umożliwiająca leniwą konwersję mapy elementów na inny format (a więc tworzenie map tylko do odczytu). Konwertowane są tylko wartości umieszczone w mapie - klucze nie mogą być transformowane.

Ogólny wariant adaptera zakłada, że konwersja może zwracać jako wynik obiekty innej klasy, niż źródłowa. Specjalizacja MapAdapterTT służy do przeprowadzania konwersji, które mają wpływ jedynie na wartości, ale nie na klasy elementów.

Oszczędza pamięć i czas procesora: nie musimy foreach'em konwertować wszystkiego ze starej mapy i kopiować do nowej. Konwersja odbywa się w locie. Jest to jeszcze bardziej istotne, niż w przypadku adapterów list, ponieważ konstrukcja samej mapy jest bardzo kosztowna. Dzięki adapterowi nie trzeba przebudowywać całego drzewa kluczy lub przeliczać wszystkich kodów haszujących. Również oszczędność pamięciowa jest nieporównywalnie większa.

Mapa pozwala na modyfikację zawartości na tyle, na ile to możliwe - tzn np na usuwanie kluczy. Zwrócone iteratory i widoki (entryList, values) pozwalają na wszystkie operacje, delegując ich realizację do klasy. Aby więc stworzyć w pełni funkcjonalny adapter działający w dwie strony, wystarczy zaimplementować metodę put.

W metodzie apply można nie tylko konwertować wartości, ale również logować operacje odczytu.
Z tego powodu adapter może być użyty z powodzeniem jako wydajna realizacja obserwatora.

Author:
ranides
See Also:
MapAdapterTT, MapBiAdapter

Nested Class Summary
 
Nested classes/interfaces inherited from interface java.util.Map
Map.Entry<K,V>
 
Constructor Summary
MapAdapter(Map<K,VS> content)
          Tworzy nowy adapter odwzorowujący podaną mapę.
 
Method Summary
 void clear()
           
 boolean containsKey(Object key)
           
 boolean containsValue(Object value)
           
 Set<Map.Entry<K,VT>> entrySet()
           
 VT get(Object key)
           
 boolean isEmpty()
           
 Set<K> keySet()
           
 VT put(K key, VT value)
           
 void putAll(Map<? extends K,? extends VT> map)
           
 VT remove(Object key)
           
 int size()
           
 String toString()
           
 Collection<VT> values()
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Map
equals, hashCode
 
Methods inherited from interface net.ranides.assira.generic.Function
apply
 

Constructor Detail

MapAdapter

public MapAdapter(Map<K,VS> content)
Tworzy nowy adapter odwzorowujący podaną mapę.

Parameters:
content -
Method Detail

size

public int size()
Specified by:
size in interface Map<K,VT>

isEmpty

public boolean isEmpty()
Specified by:
isEmpty in interface Map<K,VT>

containsKey

public boolean containsKey(Object key)
Specified by:
containsKey in interface Map<K,VT>

containsValue

public boolean containsValue(Object value)
Specified by:
containsValue in interface Map<K,VT>

get

public VT get(Object key)
Specified by:
get in interface Map<K,VT>

put

public VT put(K key,
              VT value)
Specified by:
put in interface Map<K,VT>

remove

public VT remove(Object key)
Specified by:
remove in interface Map<K,VT>

putAll

public void putAll(Map<? extends K,? extends VT> map)
Specified by:
putAll in interface Map<K,VT>

clear

public void clear()
Specified by:
clear in interface Map<K,VT>

keySet

public Set<K> keySet()
Specified by:
keySet in interface Map<K,VT>

values

public Collection<VT> values()
Specified by:
values in interface Map<K,VT>

entrySet

public Set<Map.Entry<K,VT>> entrySet()
Specified by:
entrySet in interface Map<K,VT>

toString

public String toString()
Overrides:
toString in class Object


Copyright © 2013. All Rights Reserved.