Class LazyDynaList
- All Implemented Interfaces:
Serializable, Cloneable, Iterable<Object>, Collection<Object>, List<Object>, RandomAccess, SequencedCollection<Object>
Lazy DynaBean List.
There are two main purposes for this class:
- To provide Lazy List behavior - automatically
growing and populating the
Listwith eitherDynaBean,java.util.Mapor POJO Beans. - To provide a straight forward way of putting a Collection or Array into the lazy list and a straight forward way to get it out again at the end.
All elements added to the List are stored as DynaBean's:
java.util.Mapelements are "wrapped" in aLazyDynaMap.- POJO Bean elements are "wrapped" in a
WrapDynaBean. DynaBean's are stored un-changed.
toArray()
The toArray() method returns an array of the
elements of the appropriate type. If the LazyDynaList
is populated with java.util.Map objects a
Map[] array is returned.
If the list is populated with POJO Beans an appropriate
array of the POJO Beans is returned. Otherwise a DynaBean[]
array is returned.
toDynaBeanArray()
The toDynaBeanArray() method returns a
DynaBean[] array of the elements in the List.
N.B.All the elements in the List must be the
same type. If the DynaClass or Class
of the LazyDynaList's elements is
not specified, then it will be automatically set to the type
of the first element populated.
Example 1
If you have an array of java.util.Map[] - you can put that into
a LazyDynaList.
TreeMap[] myArray = .... // your Map[]
List lazyList = new LazyDynaList(myArray);
New elements of the appropriate Map type are automatically populated:
// get(index) automatically grows the list
DynaBean newElement = (DynaBean)lazyList.get(lazyList.size());
newElement.put("someProperty", "someValue");
Once you've finished you can get back an Array of the elements of the appropriate type:
// Retrieve the array from the list
TreeMap[] myArray = (TreeMap[])lazyList.toArray());
Example 2
Alternatively you can create an empty List and specify the Class for List's elements. The LazyDynaList uses the Class to automatically populate elements:
// for example For Maps
List lazyList = new LazyDynaList(TreeMap.class);
// for example For POJO Beans
List lazyList = new LazyDynaList(MyPojo.class);
// for example For DynaBeans
List lazyList = new LazyDynaList(MyDynaBean.class);
Example 3
Alternatively you can create an empty List and specify the DynaClass for List's elements. The LazyDynaList uses the DynaClass to automatically populate elements:
// for example For Maps
DynaClass dynaClass = new LazyDynaMap(new HashMap());
List lazyList = new LazyDynaList(dynaClass);
// for example For POJO Beans
DynaClass dynaClass = (new WrapDynaBean(myPojo)).getDynaClass();
List lazyList = new LazyDynaList(dynaClass);
// for example For DynaBeans
DynaClass dynaClass = new BasicDynaClass(properties);
List lazyList = new LazyDynaList(dynaClass);
N.B. You may wonder why control the type
using a DynaClass rather than the Class
as in the previous example - the reason is that some DynaBean
implementations don't have a default empty constructor and
therefore need to be instantiated using the DynaClass.newInstance()
method.
Example 4
A slight variation - set the element type using either
the setElementType(Class) method or the
setElementDynaClass(DynaClass) method - then populate
with the normal java.util.List methods(i.e.
add(), addAll() or set()).
// Create a new LazyDynaList (100 element capacity)
LazyDynaList lazyList = new LazyDynaList(100);
// Either Set the element type...
lazyList.setElementType(TreeMap.class);
// ...or the element DynaClass...
lazyList.setElementDynaClass(new MyCustomDynaClass());
// Populate from a collection
lazyList.addAll(myCollection);
- Since:
- 1.8.0
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Class<?> The DynaBean type of the List's elements.private DynaClassThe DynaClass of the List's elements.private Class<?> The type of the List's elements.private static final longprivate WrapDynaClassThe WrapDynaClass if the List's contains POJO Bean elements.Fields inherited from class AbstractList
modCount -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a new instance.LazyDynaList(int capacity) Construct a LazyDynaList with the specified capacity.LazyDynaList(Class<?> elementType) Construct a LazyDynaList with a specified type for its elements.LazyDynaList(Object[] array) Construct a LazyDynaList populated with the elements of an Array.LazyDynaList(Collection<?> collection) Construct a LazyDynaList populated with the elements of a Collection.LazyDynaList(DynaClass elementDynaClass) Construct a LazyDynaList with a specified DynaClass for its elements. -
Method Summary
Modifier and TypeMethodDescriptionvoidInsert an element at the specified index position.booleanAdd an element to the List.booleanaddAll(int index, Collection<?> collection) Insert all the elements from a Collection into the list at a specified position.booleanaddAll(Collection<?> collection) Add all the elements from a Collection to the list.private LazyDynaMapCreates a newLazyDynaMapobject for the given property value.get(int index) Return the element at the specified position.private DynaClassReturn the DynaClass.private voidgrowList(int requiredSize) Automatically grown the List to the appropriate size, populating with DynaBeans.Set the element at the specified position.voidsetElementDynaClass(DynaClass elementDynaClass) Set the element Type and DynaClass.voidsetElementType(Class<?> elementType) Set the element Type and DynaClass.Object[]toArray()Converts the List to an Array.<T> T[]toArray(T[] model) Converts the List to an Array of the specified type.DynaBean[]Converts the List to an DynaBean Array.private DynaBeanTransform the element into a DynaBean:Methods inherited from class ArrayList
addFirst, addLast, clear, clone, contains, ensureCapacity, equals, forEach, getFirst, getLast, hashCode, indexOf, isEmpty, iterator, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeFirst, removeIf, removeLast, removeRange, replaceAll, retainAll, size, sort, spliterator, subList, trimToSizeMethods inherited from class AbstractCollection
containsAll, toStringMethods inherited from interface Collection
parallelStream, stream, toArrayMethods inherited from interface List
containsAll, reversed
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
elementDynaClass
The DynaClass of the List's elements. -
wrapDynaClass
The WrapDynaClass if the List's contains POJO Bean elements. WrapDynaClass isn't serlializable, which is why its stored separately in a transient instance variable. -
elementType
The type of the List's elements. -
elementDynaBeanType
The DynaBean type of the List's elements.
-
-
Constructor Details
-
LazyDynaList
public LazyDynaList()Constructs a new instance. -
LazyDynaList
Construct a LazyDynaList with a specified type for its elements.- Parameters:
elementType- The Type of the List's elements.
-
LazyDynaList
Construct a LazyDynaList populated with the elements of a Collection.- Parameters:
collection- The Collection to populate the List from.
-
LazyDynaList
Construct a LazyDynaList with a specified DynaClass for its elements.- Parameters:
elementDynaClass- The DynaClass of the List's elements.
-
LazyDynaList
public LazyDynaList(int capacity) Construct a LazyDynaList with the specified capacity.- Parameters:
capacity- The initial capacity of the list.
-
LazyDynaList
Construct a LazyDynaList populated with the elements of an Array.- Parameters:
array- The Array to populate the List from.
-
-
Method Details
-
add
Insert an element at the specified index position.
If the index position is greater than the current size of the List, then the List is automatically grown to the appropriate size.
-
add
-
addAll
Add all the elements from a Collection to the list.
-
addAll
Insert all the elements from a Collection into the list at a specified position.
If the index position is greater than the current size of the List, then the List is automatically grown to the appropriate size.
-
createDynaBeanForMapProperty
Creates a newLazyDynaMapobject for the given property value.- Parameters:
value- the property value- Returns:
- the newly created
LazyDynaMap
-
get
Return the element at the specified position.
If the position requested is greater than the current size of the List, then the List is automatically grown (and populated) to the appropriate size.
-
getDynaClass
Return the DynaClass. -
growList
private void growList(int requiredSize) Automatically grown the List to the appropriate size, populating with DynaBeans.
- Parameters:
requiredSize- the required size of the List.
-
set
Set the element at the specified position.
If the position requested is greater than the current size of the List, then the List is automatically grown (and populated) to the appropriate size.
-
setElementDynaClass
Set the element Type and DynaClass.
- Parameters:
elementDynaClass- The DynaClass of the elements.- Throws:
IllegalArgumentException- if the List already contains elements or the DynaClass is null.
-
setElementType
Set the element Type and DynaClass.
- Parameters:
elementType- The type of the elements.- Throws:
IllegalArgumentException- if the List already contains elements or the DynaClass is null.
-
toArray
Converts the List to an Array.
The type of Array created depends on the contents of the List:
- If the List contains only LazyDynaMap type elements then a java.util.Map[] array will be created.
- If the List contains only elements which are "wrapped" DynaBeans then an Object[] of the most suitable type will be created.
- ...otherwise a DynaBean[] will be created.
-
toArray
public <T> T[] toArray(T[] model) Converts the List to an Array of the specified type.
- Specified by:
toArrayin interfaceCollection<Object>- Specified by:
toArrayin interfaceList<Object>- Overrides:
toArrayin classArrayList<Object>- Type Parameters:
T- The type of the array elements- Parameters:
model- The model for the type of array to return- Returns:
- An Array of the elements in this List.
-
toDynaBeanArray
Converts the List to an DynaBean Array.
- Returns:
- A DynaBean[] of the elements in this List.
-
transform
-