Class CollectionHelpers
Make use of "static imports" to omit even more needless code.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> T[]arr(T... ts) "Converts" the incoming "varargs" into an array.static <E> List<E> arrList()Creates an emptyArrayListthat uses a little cleverness with Java's generics.static <E> List<E> arrList(int capacity) Creates an emptyArrayListwith a given capacity.static <E> List<E> arrList(Collection<? extends E> c) Copies an existingCollectioninto a newArrayList.static <A,B extends A>
Bcast(A o) "Generics-friendly" way to cast an object of some superclass (A) to a subclass or implementation (B).static <E> Collection<E> collect(Class<? extends Collection> cl, E... elements) Creates a newclinstance (limited to things implementingCollection) populated with the "varargs".static <E> List<E> Creates an emptyCopyOnWriteArrayList.static <E> List<E> concurrentList(E... elems) Creates a newCopyOnWriteArrayListfrom the incoming "varargs".static <E> List<E> concurrentList(Collection<E> original) Creates a newCopyOnWriteArrayListthat contains all of the elements inoriginal.static <K,V> Map <K, V> Abuses Java's sad "type" implementation to create a newConcurrentHashMap.static <E> Set<E> Creates a newCopyOnWriteArraySet.static <E> Set<E> concurrentSet(E... elems) Creates a newCopyOnWriteArraySetfrom the incoming "varargs".static <E> Set<E> concurrentSet(Collection<E> original) Creates a newCopyOnWriteArraySetthat contains all of the elements inoriginal.static booleanSearches an object to see if it "contains" another object.static intDetermines the "length" of a given object.static <E> List<E> static <E> List<E> linkedList(Collection<? extends E> c) static <E> List<E> list(E... elements) Creates aListfrom incoming "varargs".static <A,B> List <B> Applies a given function to each item in a given list.static <A,B> Set <B> Applies a given function to each item in a givenSet.static <E> Set<E> Creates an emptyHashSetthat uses a little cleverness with Java's generics.static <E> Set<E> newHashSet(int initialCapacity) Creates an emptyHashSetwith a given initial capacity.static <E> Set<E> newHashSet(Collection<E> original) Copies an existingCollectioninto a newHashSet.static <K,V> Map <K, V> Creates an emptyLinkedHashMapthat uses a little cleverness with Java's generics.static <K,V> Map <K, V> newLinkedHashMap(int initialCapacity) Creates an emptyLinkedHashMapwith a given initial capacity.static <K,V> Map <K, V> newLinkedHashMap(Map<K, V> original) Copies an existingMapinto a newLinkedHashMap.static <E> Set<E> Creates an emptyLinkedHashSetthat uses a little cleverness with Java's generics.static <E> Set<E> newLinkedHashSet(int initialCapacity) Creates an emptyLinkedHashSetwith a given initial capacity.static <E> Set<E> newLinkedHashSet(Collection<E> original) Copies aCollectioninto a newLinkedHashSet.static <K,V> Map <K, V> newMap()Creates an emptyHashSetthat uses a little cleverness with Java's generics.static <K,V> Map <K, V> newMap(int initialCapacity) Creates an emptyHashSetwith a given initial capacity.static <K,V> Map <K, V> static <E> Collection<E> recollect(Class<? extends Collection> cl, Collection<E> old) Copies an existingCollectioninto a new (non-abstract!)static <E> Set<E> set(E... elements) Creates aSetfrom incoming "varargs".static <K,V> Map <K, V> zipMap(Collection<? extends K> keys, Collection<? extends V> values) A version ofzipMap(Object[], Object[])that works withCollections.static <K,V> Map <K, V> zipMap(K[] keys, V[] values)
-
Constructor Details
-
CollectionHelpers
private CollectionHelpers()Never!
-
-
Method Details
-
arr
"Converts" the incoming "varargs" into an array.Useful for doing things like:
String[] strs = arr("hello", "how", "are", "you?");- Type Parameters:
T- Type of items to be converted into an array.- Parameters:
ts- Items that will make up the elements of the returned array. Cannot benull, and (for now) the items should be of the same type.- Returns:
- Array populated with each item from
ts.
-
list
Creates aListfrom incoming "varargs". Currently usesArrayListas theListimplementation.Used like so:
List<String> listy = list("y", "helo", "thar");- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
elements- Items that will make up the elements of the returnedList.- Returns:
Listwhose elements are each item withinelements.
-
set
Creates aSetfrom incoming "varargs". Currently usesLinkedHashSetas theSetimplementation (to preserve ordering).Used like so:
for (String s : set("beep", "boop", "blorp")) { ... }- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
elements- Items that will appear within the returnedSet. Cannot benull, and (for now) the items should be of the same type.- Returns:
- A
Setcontaining the items inelements. Remember thatSets only contain unique elements!
-
collect
Creates a newclinstance (limited to things implementingCollection) populated with the "varargs". Useful if you truly despisearr(Object...),list(Object...), orset(Object...).Example:
Collection<Integer> ints = collect(PriorityBlockingQueue.class, 1, 2, 3);- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
cl- A (non-abstract!) class that implementsCollection. Cannot benull.elements- Objects that will be added to the collection.- Returns:
- An instance of
clcontaining the given objects. - Throws:
RuntimeException- ifConstructor#newInstance(Object...)had problems.- See Also:
-
len
Determines the "length" of a given object. This method currently understands:More coming!
- Parameters:
o-Objectwhose length we want. Cannot benull.- Returns:
- "Length" of
o. - Throws:
NullPointerException- ifoisnull.IllegalArgumentException- if the method doesn't know how to test whatever type of objectomight be.
-
contains
Searches an object to see if it "contains" another object. This method currently knows how to search:More coming!
- Parameters:
collection-Objectthat will be searched foritem. Cannot benull.item-Objectto search for withino.nullvalues are allowed.- Returns:
trueifocontainsitem,falseotherwise.- Throws:
NullPointerException- ifoisnull.IllegalArgumentException- if the method doesn't know how to search whatever type of objectomight be.
-
newHashSet
Creates an emptyHashSetthat uses a little cleverness with Java's generics. Useful for eliminating redundant type information and declaring fields asfinal.Please consider using
newHashSet(int)ornewHashSet(Collection)instead of this method.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Returns:
- A new, empty
HashSet. - See Also:
-
newHashSet
Creates an emptyHashSetwith a given initial capacity.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
initialCapacity- Initial capacity of theHashSet. Cannot be negative.- Returns:
- A new, empty
HashSetwith the given initial capacity.
-
newHashSet
Copies an existingCollectioninto a newHashSet.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
original-Collectionto be copied. Cannot benull.- Returns:
- A new
HashSetwhose contents are the same asoriginal.
-
newLinkedHashSet
Creates an emptyLinkedHashSetthat uses a little cleverness with Java's generics. Useful for eliminating redundant type information and declaring fields asfinal.Please consider using
newLinkedHashSet(int)ornewLinkedHashSet(Collection)instead of this method.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Returns:
- A new, empty
LinkedHashSet. - See Also:
-
newLinkedHashSet
Creates an emptyLinkedHashSetwith a given initial capacity.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
initialCapacity- Initial capacity of theLinkedHashSet. Cannot be negative.- Returns:
- A new, empty
LinkedHashSetwith the given initial capacity.
-
newLinkedHashSet
Copies aCollectioninto a newLinkedHashSet.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
original- Collection to be copied. Cannot benull.- Returns:
- A new
LinkedHashSetwhose contents are the same asoriginal.
-
newMap
Creates an emptyHashSetthat uses a little cleverness with Java's generics. Useful for eliminating redundant type information and declaring fields asfinal, while also reducing compiler warnings.Please consider using
newMap(int)ornewMap(Map)instead of this method.- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Returns:
- A new, empty
HashMap. - See Also:
-
newMap
Creates an emptyHashSetwith a given initial capacity.- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Parameters:
initialCapacity- Initial capacity of theHashMap. Cannot be negative.- Returns:
- A new, empty
HashMapwith the given initial capacity.
-
newMap
- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Parameters:
original- Map to be copied. Cannot benull.- Returns:
- A new
HashMapwhose contents are the same asoriginal.
-
newLinkedHashMap
Creates an emptyLinkedHashMapthat uses a little cleverness with Java's generics. Useful for eliminating redundant type information and declaring fields asfinal, while also reducing compiler warnings.Please consider using
newLinkedHashMap(int)ornewLinkedHashSet(Collection)instead of this method.- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Returns:
- A new, empty
LinkedHashMap. - See Also:
-
newLinkedHashMap
Creates an emptyLinkedHashMapwith a given initial capacity.- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Parameters:
initialCapacity- Initial capacity of theLinkedHashMap. Cannot be negative.- Returns:
- A new, empty
LinkedHashMapwith the given initial capacity.
-
newLinkedHashMap
Copies an existingMapinto a newLinkedHashMap.- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Parameters:
original- Map to be copied. Cannot benull.- Returns:
- A new
LinkedHashMapwhose contents are the same asoriginal.
-
concurrentMap
Abuses Java's sad "type" implementation to create a newConcurrentHashMap.- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Returns:
- Shiny and new
ConcurrentHashMap
-
concurrentList
Creates an emptyCopyOnWriteArrayList. Keep in mind that you only want to useCopyOnWriteArrayListfor lists that are not going to be modified very often!- Type Parameters:
E- Type of items that will be added to the resulting collection.- Returns:
- A new, empty
CopyOnWriteArrayList.
-
concurrentList
Creates a newCopyOnWriteArrayListthat contains all of the elements inoriginal. Keep in mind that you only want to useCopyOnWriteArrayListfor lists that are not going to be modified very often!- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
original- Collection to be copied into the new list.- Returns:
- A new
CopyOnWriteArrayListwhose contents are the same asoriginal.
-
concurrentList
Creates a newCopyOnWriteArrayListfrom the incoming "varargs". Keep in mind that you only want to useCopyOnWriteArrayListfor lists that are not going to be modified very often!- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
elems- Elements that will be contained in the resulting list.- Returns:
- A new
CopyOnWriteArrayListthat contains the incoming objects.
-
concurrentSet
Creates a newCopyOnWriteArraySet. Keep in mind that you only want to use aCopyOnWriteArraySetfor sets that are not going to be modified very often!- Type Parameters:
E- Type of items that will be added to the resulting collection.- Returns:
- New, empty
CopyOnWriteArraySet.
-
concurrentSet
Creates a newCopyOnWriteArraySetthat contains all of the elements inoriginal. Keep in mind that you only want to use aCopyOnWriteArraySetfor sets that are not going to be modified very often!- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
original- Collection to be copied into the new set.- Returns:
CopyOnWriteArraySetwhose contents are the same asoriginal.
-
concurrentSet
Creates a newCopyOnWriteArraySetfrom the incoming "varargs". Keep in mind that you only want to use aCopyOnWriteArraySetfor sets that are not going to be modified very often!- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
elems- Elements that will be contained in the resulting set.- Returns:
CopyOnWriteArraySetthat contains the incoming objects.
-
linkedList
-
linkedList
-
arrList
Creates an emptyArrayListthat uses a little cleverness with Java's generics. Useful for eliminating redundant type information and declaring fields asfinal.Used like so:
List<String> listy = arrList();Please consider using
arrList(int)orarrList(Collection)instead of this method.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Returns:
- A new, empty
ArrayList. - See Also:
-
arrList
Creates an emptyArrayListwith a given capacity.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
capacity- The initial size of the returnedArrayList.- Returns:
- A new, empty
ArrayListthat has an initial capacity ofcapacityelements. - See Also:
-
arrList
Copies an existingCollectioninto a newArrayList.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
c-Collectionwhose elements are to be placed into the returnedArrayList.- Returns:
- An
ArrayListcontaining the elements ofc. - See Also:
-
recollect
Copies an existingCollectioninto a new (non-abstract!)Collectionclass.- Type Parameters:
E- Type of items that will be added to the resulting collection.- Parameters:
cl- Non-abstractCollectionclass.old- An existingCollection.- Returns:
- A new instance of
clthat contains all of the elements fromold. - Throws:
RuntimeException- if there was trouble creating a new instance ofcl.- See Also:
-
zipMap
Takes arrays ofkeysandvaluesand merges them together to form aMap. The returnedMapis aLinkedHashMapand is truncated in length to the length of the shorter parameter.This is intended for use as "varargs" supplied to
arr(Object...). Rather than doing something ugly like:Map<String, String> mappy = new LinkedHashMap<String, String>(); mappy.put("key0", "val0"); mappy.put("key1", "val1"); ... mappy.put("keyN", "valN");Simply do like so:mappy = zipMap( arr("key0", "key1", ..., "keyN"), arr("val0", "val1", ..., "valN"));The latter approach also allows you to make
static finalMaps much more easily.- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Parameters:
keys- Array whose elements will be the keys in aMap.values- Array whose elements will the values in aMap.- Returns:
- A
Mapwhose entries are of the formkeys[N], values[N]. - See Also:
-
zipMap
A version ofzipMap(Object[], Object[])that works withCollections.- Type Parameters:
K- Type of keys that will be added to theMap.V- Type of values that will be added to theMap.- Parameters:
keys- Items that will be the keys in the resultingMap.values- Items that will be the values in the resultMap.- Returns:
- A
Mapwhose entries are of the formkeys[N], values[N]. - See Also:
-
map
Applies a given function to each item in a given list.- Type Parameters:
A- Type of items that will be passed intof.B- Type of items that will be in the resultingList.- Parameters:
f- TheFunctionto apply.as- The list whose items are to be fed intof.- Returns:
- New list containing the results of each element of
asbeing passed throughf.
-
map
Applies a given function to each item in a givenSet.- Type Parameters:
A- Type of items that will be passed intof.B- Type of items that will be in the resultingSet.- Parameters:
f- TheFunctionto apply toas.as- TheSetwhose items are to be fed intof.- Returns:
- New
Setcontaining the results of passing each element inasthroughf.
-
cast
"Generics-friendly" way to cast an object of some superclass (A) to a subclass or implementation (B). This method will fail if you attempt to cast to a type that is not a subclass of typeA.Example/Justification:
Consider a method likeXmlUtil.findChildren(Node, String).
DespitefindChildrenonly returning lists containingNodeobjects, Java will generate a warning for the following code:import ucar.unidata.xml.XmlUtil; .... List<Node> nodes = XmlUtil.findChildren(panel, "blah");
castis a nice and terse way to avoid those warnings. Here's the previous example (with static imports ofcastandfindChildren):import static ucar.unidata.xml.XmlUtil.findChildren; import static edu.wisc.ssec.mcidasv.util.CollectionHelpers.cast; .... List<Node> nodes = cast(findChildren(panel, "blah"));
- Type Parameters:
A- Superclass ofB. This is what you are "casting from"...likelyObjectin most casesB- Subclass ofA. This is what you are "casting to".- Parameters:
o- The object whose type you are casting.- Returns:
o, casted from typeAtoB. Enjoy!
-