|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectjava.util.AbstractCollection<E>
java.util.AbstractList<T>
net.ranides.assira.collection.list.ListAdapter<T,S>
T - format publiczny, udostępniany konsumentowiS - wewnętrzny format danychpublic abstract class ListAdapter<T,S>
Klasa abstrakcyjna umożliwiająca leniwą konwersję listy elementów na inny format (a więc tworzenie list tylko do odczytu).
Ogólny wariant adaptera zakłada, że konwersja może zwracać jako wynik obiekty
innej klasy, niż źródłowa. Specjalizacja ListAdapterTT 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 listy i kopiować do nowej. Konwersja odbywa się w locie.
Rozwiązuje problem przekazania danych w określonym formacie do widoku, który ma prawo jedynie je odczytywać - a nie modyfikować. Próba modyfikacji powoduje wyjątek zamiast "cichego" nieokreślonego zachowania polegającego na modyfikowaniu listy w oparciu o wiązania "do referencji"
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. |
| Constructor Summary | |
|---|---|
ListAdapter(List<S> content)
Tworzy nowy adapter odwzorowujący podaną listę. |
|
ListAdapter(S[] content)
Tworzy nowy adapter odwzorowujący podaną tablicę. |
|
| Method Summary | ||
|---|---|---|
List<T> |
apply()
Wykonuje natychmiast pełną konwersję wszystkich elementów i jako wynik zwraca nową tablicę, która jest w pełni niezależna od adaptera oraz kolekcji źródłowej. |
|
static
|
apply(Collection<S> content,
Function<T,S> function)
Metoda statyczna pozwalająca transformować podaną listę za pomocą przekazanego operatora konwersji. |
|
T |
get(int index)
|
|
static
|
inverse(Collection<T> content,
CoFunction<T,S> function)
Metoda statyczna pozwalająca transformować podaną listę za pomocą przekazanego operatora konwersji. |
|
int |
size()
|
|
| Methods inherited from class java.util.AbstractList |
|---|
add, add, addAll, clear, equals, hashCode, indexOf, iterator, lastIndexOf, listIterator, listIterator, remove, set, subList |
| Methods inherited from class java.util.AbstractCollection |
|---|
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray, toString |
| Methods inherited from class java.lang.Object |
|---|
getClass, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface net.ranides.assira.generic.Function |
|---|
apply |
| Methods inherited from interface java.util.List |
|---|
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray |
| Constructor Detail |
|---|
public ListAdapter(List<S> content)
content - public ListAdapter(S[] content)
content - | Method Detail |
|---|
public T get(int index)
get in interface List<T>get in class AbstractList<T>public int size()
size in interface Collection<T>size in interface List<T>size in class AbstractCollection<T>public List<T> apply()
Adapter dokonuje konwersji przy każdej operacji odczytu, zwracając najbardziej aktualną i zsynchronizowaną wartość. Jeśli lista źródłowa nie jest często modyfikowana, a adapter jest bardzo intensywnie używany (wielokrotne iterowanie po całej zawartości) optymalniejszym rozwiązaniem może być wywołanie poniższej metody i praca na zwróconej kopii.
Użycie metody może oszczędzić nam wielokrotnego dokonywania tych samych konwersji (a więc czas procesora) ale tracimy całą oszczędność pamięciową.
public static <S,T> List<T> apply(Collection<S> content,
Function<T,S> function)
S - T - content - transformowana listafunction -
public static <S,T> List<S> inverse(Collection<T> content,
CoFunction<T,S> function)
S - T - content - transformowana listafunction -
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||