Project Wonder 5.0

er.extensions.foundation
Class ERXArrayUtilities

java.lang.Object
  extended by er.extensions.foundation.ERXArrayUtilities

public class ERXArrayUtilities
extends java.lang.Object

Collection of NSArray utilities.


Nested Class Summary
static class ERXArrayUtilities.AvgNonNullOperator
          Define an NSArray.Operator for the key avgNonNull.

This allows for key value paths like:
myArray.valueForKey("@avgNonNull.payment.amount"); myArray.valueForKey("payment.@avgNonNull.amount"); myArray.valueForKey("payment.amount.@avgNonNull"); which will sum up all values for the key amount and divide by the number of nun-null entries.
static class ERXArrayUtilities.FetchSpecOperator
          Define an NSArray.Operator for the key fetchSpec.

This allows for key value paths like:

myArray.valueForKey("@fetchSpec.fetchUsers");

Which in this case would return myArray filtered and sorted by the EOFetchSpecification named "fetchUsers" which must be a model-based fetchspec in the first object's entity.
static class ERXArrayUtilities.FlattenOperator
          Define an NSArray.Operator for the key flatten.

This allows for key value paths like:

myArray.valueForKey("@flatten.someOtherPath");

Which in this case would return myArray flattened if myArray is an NSArray of NSArrays (of NSArrays etc) before continuing to process someOtherPath.
static class ERXArrayUtilities.IsEmptyOperator
          Define an NSArray.Operator for the key isEmpty.

This allows for key value paths like:

myArray.valueForKey("@isEmpty");

Which in this case would return true if the myArray.count() == 0, or false if it is not.
static class ERXArrayUtilities.LimitOperator
          Define an NSArray.Operator for the key limit, which is similar to subarrayWithRange except it is always from 0 to the limit value.
static class ERXArrayUtilities.MedianOperator
          Define an NSArray.Operator for the key median.

This allows for key value paths like:
myArray.valueForKey("@median.payment.amount"); myArray.valueForKey("payment.@median.amount"); myArray.valueForKey("payment.amount.@median"); which return the median of the array elements at the given key path.
static class ERXArrayUtilities.ObjectAtIndexOperator
          Define an NSArray.Operator for the key objectAtIndex.

This allows for key value paths like:

myArray.valueForKey("@objectAtIndex.3.firstName");

static class ERXArrayUtilities.RemoveNullValuesOperator
          Define an NSArray.Operator for the key removeNullValues.

This allows for key value paths like:

myArray.valueForKeyPath("@removeNullValues.someOtherPath");

Which in this case would remove the occurrences of NSKeyValueCoding.Null from myArray before continuing to process someOtherPath.
static class ERXArrayUtilities.ReverseOperator
          Define an NSArray.Operator for the key reverse.

This allows for key value paths like:

myArray.valueForKey("@reverse.someOtherPath");

which would reverse the order of the array myArray before continuing to process someOtherPath.
static class ERXArrayUtilities.SortOperator
          Define an NSArray.Operator for the key sort.

This allows for key value paths like:
myArray.valueForKey("@sort.firstName"); myArray.valueForKey("@sort.lastName,firstName.length"); Which in the first case would return myArray sorted ascending by first name and the second case by lastName and then by the length() of the firstName.
static class ERXArrayUtilities.StandardDeviationOperator
          Define an NSArray.Operator for the key stdDev and popStdDev.

This allows for key value paths like:
myArray.valueForKey("@stdDev.payment.amount"); myArray.valueForKey("payment.@stdDev.amount"); myArray.valueForKey("payment.amount.@stdDev"); All three of these examples will return the same value, which in this case is the standard deviation of the amounts.
static class ERXArrayUtilities.SubarrayWithRangeOperator
          Define an NSArray.Operator for the key subarrayWithRange.

This allows for key value paths like:

myArray.valueForKeyPath("@subarrayWithRange.20-3.someOtherPath");

Which in this case would return the three objects from myArray, starting at the index of 20, before continuing to process someOtherPath.
static class ERXArrayUtilities.UniqueOperator
          Define an NSArray.Operator for the key unique.

This allows for key value paths like:

myArray.valueForKeyPath("@unique.someOtherPath");

Which in this case would return only those objects which are unique in myArray before continuing to process someOtherPath.
 
Field Summary
static java.lang.String NULL_GROUPING_KEY
          Holds the null grouping key for use when grouping objects based on a key that might return null and nulls are allowed
 
Constructor Summary
ERXArrayUtilities()
           
 
Method Summary
static
<T> void
addObjectsFromArrayWithoutDuplicates(com.webobjects.foundation.NSMutableArray<T> a1, com.webobjects.foundation.NSArray<? extends T> a2)
          Adds all of the non-duplicate elements from the second array to the mutable array.
static
<T> com.webobjects.foundation.NSArray<T>
arrayByAddingObjectsFromArrayWithoutDuplicates(com.webobjects.foundation.NSArray<? extends T> a1, com.webobjects.foundation.NSArray<? extends T> a2)
          Creates an array preserving order by adding all of the non-duplicate values from the second array to the first.
static
<T> com.webobjects.foundation.NSArray<T>
arrayByRemovingFirstObject(com.webobjects.foundation.NSArray<T> array)
          Creates an array that has all of the objects of the parameter array without the first object.
static
<T> com.webobjects.foundation.NSArray<T>
arrayBySelectingInstancesOfClass(com.webobjects.foundation.NSArray<?> array, java.lang.Class<T> aClass)
          Prunes an array for only instances of the given class.
static
<T> boolean
arrayContainsAnyObjectFromArray(com.webobjects.foundation.NSArray<? extends T> array, com.webobjects.foundation.NSArray<? extends T> objects)
          Function to determine if an array contains any of the elements of another array.
static
<T> boolean
arrayContainsArray(com.webobjects.foundation.NSArray<? extends T> array, com.webobjects.foundation.NSArray<? extends T> objects)
          Function to determine if an array contains all of the elements of another array.
static com.webobjects.foundation.NSArray<?> arrayForKeysPath(com.webobjects.foundation.NSArray<?> array, com.webobjects.foundation.NSArray<java.lang.String> keys)
          Returns an array of dictionaries containing the key/value pairs for the given paths.
static com.webobjects.foundation.NSArray arrayFromPropertyList(java.lang.String name, com.webobjects.foundation.NSBundle bundle)
          Creates an NSArray from a resource associated with a given bundle that is in property list format.
static
<T,K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<T> objects, ERXKey<K> keyPath, boolean includeNulls, ERXKey<V> valueKeyPath)
          Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary.
static
<T,K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<T> objects, ERXKey<K> keyPath, K nullGroupingKey, ERXKey<V> valueKeyPath)
          Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary.
static
<T,K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<T> objects, java.lang.String keyPath, boolean includeNulls, java.lang.String valueKeyPath)
          Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary.
static
<K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<V> objects, ERXKey<K> keyPath)
          Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary.
static
<K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<V> objects, java.lang.String keyPath)
          Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary.
static com.webobjects.foundation.NSDictionary arrayGroupedByKeyPath(com.webobjects.foundation.NSArray objects, java.lang.String keyPath, java.lang.Object nullGroupingKey, java.lang.String valueKeyPath)
          Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary.
static
<T,K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<T> objects, ERXKey<K> keyPath, K nullGroupingKey, ERXKey<V> valueKeyPath)
          Typesafe variant of arrayGroupedByToManyKeyPath.
static
<K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<V> objects, ERXKey<K> keyPath, boolean includeNulls)
          Typesafe variant of arrayGroupedByToManyKeyPath.
static
<K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<V> objects, ERXKey<K> keyPath, K nullGroupingKey)
          Typesafe variant of arrayGroupedByToManyKeyPath.
static
<K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<V> objects, java.lang.String keyPath, boolean includeNulls)
          Groups an array of objects by a given to-many key path, where every single item in the to-many will put the object in the corresponding group.
static
<K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>>
arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<V> objects, java.lang.String keyPath, K nullGroupingKey)
          Groups an array of objects by a given to-many key path, where every single item in the to-many will put the object in the corresponding group.
static com.webobjects.foundation.NSDictionary arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray objects, java.lang.String keyPath, java.lang.Object nullGroupingKey, java.lang.String valueKeyPath)
          Groups an array of objects by a given to-many key path, where every single item in the to-many will put the object in the corresponding group.
static
<T> com.webobjects.foundation.NSArray<T>
arrayMinusArray(com.webobjects.foundation.NSArray<T> main, com.webobjects.foundation.NSArray<?> minus)
          Subtracts the contents of one array from another.
static
<T> com.webobjects.foundation.NSArray<T>
arrayMinusObject(com.webobjects.foundation.NSArray<T> main, java.lang.Object object)
          Subtracts a single object from an array.
static
<T> boolean
arraysAreIdenticalSets(com.webobjects.foundation.NSArray<? super T> a1, com.webobjects.foundation.NSArray<? super T> a2)
          Simple comparision method to see if two array objects are identical sets.
static
<T> com.webobjects.foundation.NSArray<T>
arrayWithObjectsAtIndexesSwapped(com.webobjects.foundation.NSArray<T> array, int indexOfObject1, int indexOfObject2)
          Swaps the two objects at the given indexes in the given NSArray and returns a new NSArray.
static
<T> com.webobjects.foundation.NSArray<T>
arrayWithObjectsSwapped(com.webobjects.foundation.NSArray<T> array, java.lang.Object object1, java.lang.Object object2)
          Swaps the two given Objects in the given NSArray and returns a new NSArray.
static
<T> com.webobjects.foundation.NSArray<T>
arrayWithoutDuplicateKeyValue(com.webobjects.foundation.NSArray<T> objects, java.lang.String key)
          Filters out duplicates of an array of objects based on the value of the given key path off of those objects.
static
<T> com.webobjects.foundation.NSArray<T>
arrayWithoutDuplicates(com.webobjects.foundation.NSArray<T> anArray)
          Filters out all of the duplicate objects in a given array.
Preserves the order now.
static
<T> com.webobjects.foundation.NSArray<com.webobjects.foundation.NSArray<T>>
batchedArrayWithSize(com.webobjects.foundation.NSArray<T> array, int batchSize)
          Batches an NSArray into sub-arrays of the given size.
static
<T> com.webobjects.foundation.NSArray<T>
deepClone(com.webobjects.foundation.NSArray<T> array, boolean onlyCollections)
          Returns a deep clone of the given array.
static
<T> com.webobjects.foundation.NSSet<T>
deepClone(com.webobjects.foundation.NSSet<T> set, boolean onlyCollections)
          Returns a deep clone of the given set.
static
<K,T> com.webobjects.foundation.NSDictionary<K,T>
dictionaryOfObjectsIndexedByKeyPath(com.webobjects.foundation.NSArray<T> array, java.lang.String keyPath)
          Calls dictionaryOfObjectsIndexedByKeyPathThrowOnCollision() passing false for throwOnCollision.
static
<K,T> com.webobjects.foundation.NSDictionary<K,T>
dictionaryOfObjectsIndexedByKeyPathThrowOnCollision(com.webobjects.foundation.NSArray<T> array, java.lang.String keyPath, boolean throwOnCollision)
          Given an array of objects, returns a dictionary mapping the value by performing valueForKeyPath on each object in the array to the object in the array.
static
<T> com.webobjects.foundation.NSArray<T>
distinct(com.webobjects.foundation.NSArray<T> array)
          Shorter name for arrayWithoutDuplicates, which I always forget the name of.
static boolean enumerationHasMatchWithQualifierEvaluation(java.util.Enumeration<?> enumeration, com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
          Filters any kinds of collections that implements Enumeration interface such as NSArray, NSSet, Vector and Hashtable using the EOQualifierEvaluation interface.
static
<T> com.webobjects.foundation.NSArray<T>
filteredArrayWithEntityFetchSpecification(com.webobjects.foundation.NSArray<T> array, java.lang.String entity, java.lang.String fetchSpec)
          Filters a given array with a named fetch specification.
static
<T> com.webobjects.foundation.NSArray<T>
filteredArrayWithEntityFetchSpecification(com.webobjects.foundation.NSArray<T> array, java.lang.String entity, java.lang.String fetchSpec, com.webobjects.foundation.NSDictionary<java.lang.String,?> bindings)
          Filters a given array with a named fetch specification and bindings.
static
<T> com.webobjects.foundation.NSArray<T>
filteredArrayWithFetchSpecificationNamedEntityNamed(com.webobjects.foundation.NSArray<T> array, java.lang.String fetchSpec, java.lang.String entity)
          Deprecated.  
static
<T> com.webobjects.foundation.NSArray<T>
filteredArrayWithFetchSpecificationNamedEntityNamedBindings(com.webobjects.foundation.NSArray<T> array, java.lang.String fetchSpec, java.lang.String entity, com.webobjects.foundation.NSDictionary<java.lang.String,?> bindings)
          Deprecated.  
static
<T> com.webobjects.foundation.NSArray<T>
filteredArrayWithQualifierEvaluation(java.util.Enumeration<T> enumeration, com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
          Filters any kinds of collections that implements Enumeration interface such as NSArray, NSSet, Vector and Hashtable using the EOQualifierEvaluation interface.
static
<T> com.webobjects.foundation.NSArray<T>
filteredArrayWithQualifierEvaluation(java.util.Iterator<T> iterator, com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
          Filters any kind of collections that implements Iterator interface such as ArrayList, HashMap, SortedSet and TreeSet using the EOQualifierEvaluation interface.
static
<T> com.webobjects.foundation.NSArray<T>
filteredArrayWithQualifierEvaluation(com.webobjects.foundation.NSArray<T> array, com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
          Filters an array using the EOQualifierEvaluation interface.
static
<T> T
firstObject(com.webobjects.foundation.NSArray<T> array)
          Returns the first object of the array.
static
<T> T
firstObjectWithValueForKeyPath(com.webobjects.foundation.NSArray<T> array, java.lang.Object value, java.lang.String keyPath)
          Finds the first object in the array with a given value for a given key path.
static com.webobjects.foundation.NSArray flatten(com.webobjects.foundation.NSArray<?> originalArray)
          Recursively flattens an array of arrays and individual objects into a single array of elements.

For example:
NSArray foos; //Assume exists
NSArray bars = (NSArray)foos.valueForKey("toBars"); In this case if foos contained five elements then the array bars will contain five arrays each corresponding to what aFoo.toBars would return.
static com.webobjects.foundation.NSArray flatten(com.webobjects.foundation.NSArray<?> originalArray, boolean filterDuplicates)
          Recursively flattens an array of arrays and individual objects into a single array of elements.

For example:
NSArray foos; //Assume exists
NSArray bars = (NSArray)foos.valueForKey("toBars"); In this case if foos contained five elements then the array bars will contain five arrays each corresponding to what aFoo.toBars would return.
static java.lang.String friendlyDisplayForKeyPath(com.webobjects.foundation.NSArray<?> list, java.lang.String attribute, java.lang.String nullArrayDisplay, java.lang.String separator, java.lang.String finalSeparator)
          Displays a list of attributes off of objects in a 'friendly' manner.
static int indexOfFirstObjectWithValueForKeyPath(com.webobjects.foundation.NSArray<?> array, java.lang.Object value, java.lang.String keyPath)
          Finds the index of the first object in the array with a given value for a given keypath.
static
<T> int
indexOfObjectUsingEqualator(com.webobjects.foundation.NSArray<T> array, T object, ERXEqualator equalator)
          Locates an object within an array using a custom equality check provided as an ERXEqualator.
static void initialize()
          Will register new NSArray operators sort, sortAsc, sortDesc, sortInsensitiveAsc, sortInsensitiveDesc, unique, flatten, reverse, limit, and fetchSpec
static
<T> com.webobjects.foundation.NSArray<T>
intersectingElements(com.webobjects.foundation.NSArray<? extends T> array1, com.webobjects.foundation.NSArray<? extends T> array2)
          Intersects the elements of two arrays.
static boolean iteratorHasMatchWithQualifierEvaluation(java.util.Iterator<?> iterator, com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
          Filters any kinds of collections that implements Iterator interface such as NSArray, NSSet, Vector and Hashtable using the EOQualifierEvaluation interface.
static java.lang.Number median(com.webobjects.foundation.NSArray<?> array, java.lang.String keypath)
          Calculates the median value of an array.
static java.lang.String[] objectArrayCastToStringArray(java.lang.Object[] o)
          Converts an Object array to a String array by casting each element.
static java.lang.String objectArraysToString(com.webobjects.foundation.NSArray<java.lang.Object[][]> array)
          pretty prints a NSArray of two dimensional Object array which is ugly when using toString
static java.lang.String objectArrayToString(java.lang.Object[] o)
          pretty prints an Object array which is ugly when using toString
static java.lang.String objectArrayToString(java.lang.Object[][] array)
          pretty prints a two dimensional Object array which is ugly when using toString
static
<T> com.webobjects.foundation.NSArray<T>
objectsWithValueForKeyPath(com.webobjects.foundation.NSArray<T> array, java.lang.Object valueToLookFor, java.lang.String keyPath)
          Walks over an array and returns an array of objects from that array that have a particular value for a particular key path.
static
<T> com.webobjects.foundation.NSArray<T>
removeNullValues(com.webobjects.foundation.NSArray<T> array)
          Removes all occurencies of NSKeyValueCoding.NullValue in the provided array
static
<T> com.webobjects.foundation.NSArray<T>
removeNullValues(com.webobjects.foundation.NSArray<T> target, com.webobjects.foundation.NSArray<T> array)
          Removes all occurencies of NSKeyValueCoding.NullValue in the provided array
static
<T> com.webobjects.foundation.NSArray<T>
removeNullValuesFromEnd(com.webobjects.foundation.NSArray<T> array)
          removes all occurencies of NSKeyValueCoding.Null from the end of the array
static
<T> com.webobjects.foundation.NSArray<T>
reverse(com.webobjects.foundation.NSArray<T> array)
          Reverses the elements of an array
static
<T> void
safeAddObject(com.webobjects.foundation.NSMutableArray<T> array, T object)
          Adds the object to the mutable array if the object is not null.
static
<T> com.webobjects.foundation.NSSet<T>
setFromArray(com.webobjects.foundation.NSArray<T> array)
          Simply utility method to create a concrete set object from an array.
static
<T> void
shiftObjectLeft(com.webobjects.foundation.NSMutableArray<T> array, T object)
          shifts a given object in an array one value to the left (index--).
static
<T> void
shiftObjectRight(com.webobjects.foundation.NSMutableArray<T> array, T object)
          shifts a given object in an array one value to the right (index++).
static void sortArrayWithKey(com.webobjects.foundation.NSMutableArray<?> array, java.lang.String key)
          Sorts a given mutable array with a key in place.
static void sortArrayWithKey(com.webobjects.foundation.NSMutableArray<?> array, java.lang.String key, com.webobjects.foundation.NSSelector selector)
          Sorts a given mutable array with a key in place.
static
<T> com.webobjects.foundation.NSArray<T>
sortedArraySortedWithKey(com.webobjects.foundation.NSArray<T> array, java.lang.String key)
          Sorts a given array with a key in ascending fashion.
static
<T> com.webobjects.foundation.NSArray<T>
sortedArraySortedWithKey(com.webobjects.foundation.NSArray<T> array, java.lang.String key, com.webobjects.foundation.NSSelector selector)
          Sorts a given array with a key in ascending fashion.
static
<T> com.webobjects.foundation.NSArray<T>
sortedArraySortedWithKeys(com.webobjects.foundation.NSArray<T> array, com.webobjects.foundation.NSArray<java.lang.String> keys, com.webobjects.foundation.NSSelector selector)
          Sorts a given array with a set of keys according to the given selector.
static
<T> com.webobjects.foundation.NSArray<T>
sortedArrayUsingComparator(com.webobjects.foundation.NSArray<T> array, com.webobjects.foundation.NSComparator comparator)
          Just like the method NSArray#sortedArrayUsingComparator(NSComparator), except it catches the NSComparator.ComparisonException and, if thrown, it wraps it in a runtime exception.
static
<T> com.webobjects.foundation.NSMutableArray<T>
sortedMutableArraySortedWithKey(com.webobjects.foundation.NSArray<T> array, java.lang.String key)
          Sorts a given array with a key in ascending fashion and returns a mutable clone of the result.
static com.webobjects.foundation.NSSelector sortSelectorWithKey(java.lang.String key)
          The qualifiers EOSortOrdering.CompareAscending..
static java.lang.Number stdDev(com.webobjects.foundation.NSArray<?> array, java.lang.String keypath, boolean isPopulation)
          Finds the standard deviation of the numeric values found in the array at the specified keypath.
static
<T> void
swapObjectsAtIndexesInArray(com.webobjects.foundation.NSMutableArray<T> array, int indexOfA, int indexOfB)
          Swaps two objects at the given indexes in an array inplace
static
<T> void
swapObjectsInArray(com.webobjects.foundation.NSMutableArray<T> array, T a, T b)
          Swaps two objects a and b in an array inplace
static
<T> void
swapObjectWithObjectAtIndexInArray(com.webobjects.foundation.NSMutableArray<T> array, T a, int indexOfB)
          Swaps the object a with the object at the given index
static java.lang.String[] toStringArray(com.webobjects.foundation.NSArray<?> a)
           
static com.webobjects.foundation.NSArray valuesForKeyPaths(java.lang.Object array, com.webobjects.foundation.NSArray<java.lang.String> paths)
          Performs multiple key-value coding calls against an array or an object.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NULL_GROUPING_KEY

public static final java.lang.String NULL_GROUPING_KEY
Holds the null grouping key for use when grouping objects based on a key that might return null and nulls are allowed

See Also:
Constant Field Values
Constructor Detail

ERXArrayUtilities

public ERXArrayUtilities()
Method Detail

setFromArray

public static <T> com.webobjects.foundation.NSSet<T> setFromArray(com.webobjects.foundation.NSArray<T> array)
Simply utility method to create a concrete set object from an array.

Parameters:
array - of elements

sortSelectorWithKey

public static com.webobjects.foundation.NSSelector sortSelectorWithKey(java.lang.String key)
The qualifiers EOSortOrdering.CompareAscending.. and friends are actually 'special' and processed in a different/faster way when sorting than a selector that would be created by: new NSSelector("compareAscending", ObjectClassArray) This method eases the pain on creating those selectors from a string.

Parameters:
key - sort key

arrayGroupedByKeyPath

public static <K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<V> objects,
                                                                                                                         ERXKey<K> keyPath)
Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary. If passed a null array, null is returned. If passed a null keyPath, an empty dictionary is returned. This is a typesafe variant of arrayGroupedByKeyPath(NSArray objects, String keyPath).

See arrayGroupedByKeyPath(NSArray objects, String keyPath) for examples.

This method calls arrayGroupedByKeyPath(NSArray objects, String keyPath, Object nullGroupingKey, String valueKeyPath) with includeNulls set to true and valueKeyPath set to null.

Parameters:
objects - array of objects to be grouped
keyPath - path into objects used to group the objects
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have that value. Objects for which the key path returns null will be grouped with the key NULL_GROUPING_KEY

arrayGroupedByKeyPath

public static <K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<V> objects,
                                                                                                                         java.lang.String keyPath)
Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary. If passed a null array, null is returned. If passed a null keyPath, an empty dictionary is returned.

If one starts with:

( { lastName = "Barker"; firstName = "Bob"; favoriteColor = "blue"; },
{ firstName = "Bob"; favoriteColor = "red"; },
{ lastName = "Further"; firstName = "Frank"; favoriteColor = "green"; } )
and one calls arrayGroupedByKeyPath(objects, "firstName"), one gets:
{ "Bob" = ( { lastName = "Barker"; firstName = "Bob"; favoriteColor = "blue"; }, { firstName = "Bob"; favoriteColor = "red"; } );
"Frank" = ( { lastName = "Further"; firstName = "Frank"; favoriteColor = "green"; } ); }

If one calls arrayGroupedByKeyPath(objects, "lastName"), one gets:
{ "Bob" = ( { lastName = "Barker"; firstName = "Bob"; favoriteColor = "blue"; } );
"Frank" = ( { lastName = "Further"; firstName = "Frank"; favoriteColor = "green"; } );
"**** NULL GROUPING KEY ****" = ( { firstName = "Bob"; favoriteColor = "red"; } ); }

This method calls arrayGroupedByKeyPath(objects, keyPath, includeNulls, valueKeyPath) with includeNulls set to true and valueKeyPath set to null.

Parameters:
objects - array of objects to be grouped
keyPath - path into objects used to group the objects
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have that value. Objects for which the key path returns null will be grouped with the key NULL_GROUPING_KEY

arrayGroupedByKeyPath

public static <T,K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<T> objects,
                                                                                                                           ERXKey<K> keyPath,
                                                                                                                           boolean includeNulls,
                                                                                                                           ERXKey<V> valueKeyPath)
Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary. If passed a null array, null is returned. If passed a null keyPath, an empty dictionary is returned. If valueKeyPath is not null, then the grouped arrays each have valueForKey called with valueKeyPath and the grouped arrays are replaced with the results of those calls. This is a typesafe variant of arrayGroupedByKeyPath(NSArray objects, String keyPath, boolean includeNulls, String valueKeyPath).

See arrayGroupedByKeyPath(NSArray objects, String keyPath, boolean includeNulls, String valueKeyPath) for examples.

Parameters:
objects - array of objects to be grouped
keyPath - path into objects used to group the objects
includeNulls - determines if keyPaths that resolve to null are included in the resulting dictionary
valueKeyPath - used to call valueForKey on the arrays in the results dictionary, with the results of those calls each replacing the corresponding array in the results dictionary.
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have that value. Objects for which the key path returns null will be grouped with the key NULL_GROUPING_KEY

arrayGroupedByKeyPath

public static <T,K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<T> objects,
                                                                                                                           java.lang.String keyPath,
                                                                                                                           boolean includeNulls,
                                                                                                                           java.lang.String valueKeyPath)
Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary. If passed a null array, null is returned. If passed a null keyPath, an empty dictionary is returned. If valueKeyPath is not null, then the grouped arrays each have valueForKey called with valueKeyPath and the grouped arrays are replaced with the results of those calls.

If one starts with:

( { lastName = "Barker"; firstName = "Bob"; favoriteColor = "blue"; },
{ firstName = "Bob"; favoriteColor = "red"; },
{ lastName = "Further"; firstName = "Frank"; favoriteColor = "green"; } )
and one calls arrayGroupedByKeyPath(objects, "firstName", true, "favoriteColor"), one gets:
{Frank = ("green"); Bob = ("blue", "red");
If one calls arrayGroupedByKeyPath(objects, "lastName", false, "favoriteColor"), one gets:
{Further = ("green"); Barker = ("blue"); }

If one calls arrayGroupedByKeyPath(objects, "lastName", true, "favoriteColor"), one gets:
{Further = ("green"); Barker = ("blue"); "**** NULL GROUPING KEY ****" = ("red"); }

Parameters:
objects - array of objects to be grouped
keyPath - path into objects used to group the objects
includeNulls - determines if keyPaths that resolve to null are included in the resulting dictionary
valueKeyPath - used to call valueForKey on the arrays in the results dictionary, with the results of those calls each replacing the corresponding array in the results dictionary.
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have that value. Objects for which the key path returns null will be grouped with the key NULL_GROUPING_KEY

arrayGroupedByKeyPath

public static <T,K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByKeyPath(com.webobjects.foundation.NSArray<T> objects,
                                                                                                                           ERXKey<K> keyPath,
                                                                                                                           K nullGroupingKey,
                                                                                                                           ERXKey<V> valueKeyPath)
Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary. If passed a null array, null is returned. If passed a null keyPath, an empty dictionary is returned. If valueKeyPath is not null, then the grouped arrays each have valueForKey called with valueKeyPath and the grouped arrays are replaced with the results of those calls. This is a typesafe variant of arrayGroupedByKeyPath(NSArray objects, String keyPath, Object nullGroupingKey, String valueKeyPath).

See arrayGroupedByKeyPath(NSArray objects, String keyPath, Object nullGroupingKey, String valueKeyPath) for examples.

Parameters:
objects - array of objects to be grouped
keyPath - path into objects used to group the objects
nullGroupingKey - used as the key in the results dictionary for the array of objects for which the valueForKey with keyPath result is null.
valueKeyPath - used to call valueForKey on the arrays in the results dictionary, with the results of those calls each replacing the corresponding array in the results dictionary.
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have that value. Objects for which the key path returns null will be grouped with the key NULL_GROUPING_KEY

arrayGroupedByKeyPath

public static com.webobjects.foundation.NSDictionary arrayGroupedByKeyPath(com.webobjects.foundation.NSArray objects,
                                                                           java.lang.String keyPath,
                                                                           java.lang.Object nullGroupingKey,
                                                                           java.lang.String valueKeyPath)
Starting with an array of KeyValueCoding-compliant objects and a keyPath, this method calls valueForKey on each object in the array and groups the contents of the array, using the result of the valueForKey call as a key in a dictionary. If passed a null array, null is returned. If passed a null keyPath, an empty dictionary is returned. If valueKeyPath is not null, then the grouped arrays each have valueForKey called with valueKeyPath and the grouped arrays are replaced with the results of that call.

If one starts with:

( { lastName = "Barker"; firstName = "Bob"; favoriteColor = "blue"; },
{ firstName = "Bob"; favoriteColor = "red"; },
{ lastName = "Further"; firstName = "Frank"; favoriteColor = "green"; } )
and one calls arrayGroupedByKeyPath(objects, "firstName", null, "favoriteColor"), one gets:
{Frank = ("green"); Bob = ("blue", "red");
If one calls arrayGroupedByKeyPath(objects, "lastName", "extra", "favoriteColor"), one gets:
{Further = ("green"); Barker = ("blue"); "extra" = ("red"); }
If one calls arrayGroupedByKeyPath(objects, "lastName", null, "favoriteColor"), one gets:
{Further = ("green"); Barker = ("blue"); "**** NULL GROUPING KEY ****" = ("red"); }

Parameters:
objects - array of objects to be grouped
keyPath - path into objects used to group the objects
nullGroupingKey - used as the key in the results dictionary for the array of objects for which the valueForKey with keyPath result is null.
valueKeyPath - used to call valueForKey on the arrays in the results dictionary, with the results of those calls each replacing the corresponding array in the results dictionary.
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have that value. Objects for which the key path returns null will be grouped with the key NULL_GROUPING_KEY

arrayGroupedByToManyKeyPath

public static <K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<V> objects,
                                                                                                                               ERXKey<K> keyPath,
                                                                                                                               boolean includeNulls)
Typesafe variant of arrayGroupedByToManyKeyPath.

Parameters:
objects - the objects to be grouped
keyPath - the key to group by
includeNulls - determins if the keypaths that resolve to null should be allowed in the group
Returns:
the resulting dictionary

arrayGroupedByToManyKeyPath

public static <K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<V> objects,
                                                                                                                               java.lang.String keyPath,
                                                                                                                               boolean includeNulls)
Groups an array of objects by a given to-many key path, where every single item in the to-many will put the object in the corresponding group. A typical example is an array of users with a roles relationship. The result to calling arrayGroupedByToManyKeyPath(users, "roles.name") would be "admin" = (user1, user2); "editor" = (user3);.... The dictionary that is returned contains keys that correspond to the grouped keys values. This means that the object pointed to by the key path must be a cloneable object. For instance using the key path 'users' would not work because enterprise objects are not cloneable. Instead you might choose to use the key path 'users.name' of 'users.primaryKey', if your enterprise objects support this see ERXGenericRecord if interested.

Parameters:
objects - array of objects to be grouped
keyPath - path used to group the objects.
includeNulls - determines if keyPaths that resolve to null should be allowed into the group.
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have the grouped characteristic. Note that if the key path returns null then one of the keys will be the static ivar NULL_GROUPING_KEY

arrayGroupedByToManyKeyPath

public static <K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<V> objects,
                                                                                                                               ERXKey<K> keyPath,
                                                                                                                               K nullGroupingKey)
Typesafe variant of arrayGroupedByToManyKeyPath.

Parameters:
objects - array of objects to be grouped
keyPath - path used to group the objects.
nullGroupingKey - if not-null, determines if keyPaths that resolve to null should be allowed into the group; if so, this key is used for them
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have the grouped characteristic. Note that if the key path returns null then one of the keys will be the static ivar NULL_GROUPING_KEY

arrayGroupedByToManyKeyPath

public static <K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<V> objects,
                                                                                                                               java.lang.String keyPath,
                                                                                                                               K nullGroupingKey)
Groups an array of objects by a given to-many key path, where every single item in the to-many will put the object in the corresponding group. The dictionary that is returned contains keys that correspond to the grouped keys values. This means that the object pointed to by the key path must be a cloneable object. For instance using the key path 'users' would not work because enterprise objects are not cloneable. Instead you might choose to use the key path 'users.name' of 'users.primaryKey', if your enterprise objects support this see ERXGenericRecord if interested.

Parameters:
objects - array of objects to be grouped
keyPath - path used to group the objects.
nullGroupingKey - if not-null, determines if keyPaths that resolve to null should be allowed into the group; if so, this key is used for them
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have the grouped characteristic. Note that if the key path returns null then one of the keys will be the static ivar NULL_GROUPING_KEY

arrayGroupedByToManyKeyPath

public static <T,K,V> com.webobjects.foundation.NSDictionary<K,com.webobjects.foundation.NSArray<V>> arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray<T> objects,
                                                                                                                                 ERXKey<K> keyPath,
                                                                                                                                 K nullGroupingKey,
                                                                                                                                 ERXKey<V> valueKeyPath)
Typesafe variant of arrayGroupedByToManyKeyPath.

Parameters:
objects - array of objects to be grouped
keyPath - path used to group the objects.
nullGroupingKey - if not-null, determines if keyPaths that resolve to null should be allowed into the group; if so, this key is used for them
valueKeyPath - allows the grouped objects in the result to be derived from objects (by evaluating valueKeyPath), instead of being members of the objects collection. Objects that evaluate valueKeyPath to null have no value included in the result
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have the grouped characteristic. Note that if the key path returns null then one of the keys will be the static ivar NULL_GROUPING_KEY

arrayGroupedByToManyKeyPath

public static com.webobjects.foundation.NSDictionary arrayGroupedByToManyKeyPath(com.webobjects.foundation.NSArray objects,
                                                                                 java.lang.String keyPath,
                                                                                 java.lang.Object nullGroupingKey,
                                                                                 java.lang.String valueKeyPath)
Groups an array of objects by a given to-many key path, where every single item in the to-many will put the object in the corresponding group. The dictionary that is returned contains keys that correspond to the grouped keys values. This means that the object pointed to by the key path must be a cloneable object. For instance using the key path 'users' would not work because enterprise objects are not cloneable. Instead you might choose to use the key path 'users.name' of 'users.primaryKey', if your enterprise objects support this see ERXGenericRecord if interested.

Parameters:
objects - array of objects to be grouped
keyPath - path used to group the objects.
nullGroupingKey - if not-null, determines if keyPaths that resolve to null should be allowed into the group; if so, this key is used for them
valueKeyPath - allows the grouped objects in the result to be derived from objects (by evaluating valueKeyPath), instead of being members of the objects collection. Objects that evaluate valueKeyPath to null have no value included in the result
Returns:
a dictionary where the keys are the grouped values and the objects are arrays of the objects that have the grouped characteristic. Note that if the key path returns null then one of the keys will be the static ivar NULL_GROUPING_KEY

arraysAreIdenticalSets

public static <T> boolean arraysAreIdenticalSets(com.webobjects.foundation.NSArray<? super T> a1,
                                                 com.webobjects.foundation.NSArray<? super T> a2)
Simple comparision method to see if two array objects are identical sets.

Parameters:
a1 - first array
a2 - second array
Returns:
result of comparison

filteredArrayWithQualifierEvaluation

public static <T> com.webobjects.foundation.NSArray<T> filteredArrayWithQualifierEvaluation(com.webobjects.foundation.NSArray<T> array,
                                                                                            com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
Filters an array using the EOQualifierEvaluation interface.

Parameters:
array - to be filtered
qualifier - to do the filtering
Returns:
array of filtered results.

filteredArrayWithQualifierEvaluation

public static <T> com.webobjects.foundation.NSArray<T> filteredArrayWithQualifierEvaluation(java.util.Enumeration<T> enumeration,
                                                                                            com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
Filters any kinds of collections that implements Enumeration interface such as NSArray, NSSet, Vector and Hashtable using the EOQualifierEvaluation interface.

Parameters:
enumeration - to be filtered; to obtain an enumeration, use objectEnumerator() for the collections in com.webobjects.foundation package and use elements() for the Vector and Hashtable
qualifier - to do the filtering
Returns:
array of filtered results.

enumerationHasMatchWithQualifierEvaluation

public static boolean enumerationHasMatchWithQualifierEvaluation(java.util.Enumeration<?> enumeration,
                                                                 com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
Filters any kinds of collections that implements Enumeration interface such as NSArray, NSSet, Vector and Hashtable using the EOQualifierEvaluation interface.

Parameters:
enumeration - to be filtered; to obtain an enumeration, use objectEnumerator() for the collections in com.webobjects.foundation package and use elements() for the Vector and Hashtable
qualifier - to do the filtering
Returns:
true if there is at least one match

iteratorHasMatchWithQualifierEvaluation

public static boolean iteratorHasMatchWithQualifierEvaluation(java.util.Iterator<?> iterator,
                                                              com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
Filters any kinds of collections that implements Iterator interface such as NSArray, NSSet, Vector and Hashtable using the EOQualifierEvaluation interface.

Parameters:
iterator - to be filtered; to obtain an iterator, use iterator() for the java collections
qualifier - to do the filtering
Returns:
true if there is at least one match

filteredArrayWithQualifierEvaluation

public static <T> com.webobjects.foundation.NSArray<T> filteredArrayWithQualifierEvaluation(java.util.Iterator<T> iterator,
                                                                                            com.webobjects.eocontrol.EOQualifierEvaluation qualifier)
Filters any kind of collections that implements Iterator interface such as ArrayList, HashMap, SortedSet and TreeSet using the EOQualifierEvaluation interface.

Parameters:
iterator - to be filtered; use iterator() to obtain an iterator from the collections
qualifier - to do the filtering
Returns:
array of filtered results.

arrayWithoutDuplicateKeyValue

public static <T> com.webobjects.foundation.NSArray<T> arrayWithoutDuplicateKeyValue(com.webobjects.foundation.NSArray<T> objects,
                                                                                     java.lang.String key)
Filters out duplicates of an array of objects based on the value of the given key path off of those objects. Objects with a null value will be skipped, too.

Parameters:
objects - array of objects
key - keypath to be evaluated off of every object
Returns:
filter array of objects based on the value of a keypath.

arrayMinusArray

public static <T> com.webobjects.foundation.NSArray<T> arrayMinusArray(com.webobjects.foundation.NSArray<T> main,
                                                                       com.webobjects.foundation.NSArray<?> minus)
Subtracts the contents of one array from another. The order of the array should be preseved.

Parameters:
main - array to have values removed from it.
minus - array of values to remove from the main array
Returns:
array after performing subtraction.

arrayMinusObject

public static <T> com.webobjects.foundation.NSArray<T> arrayMinusObject(com.webobjects.foundation.NSArray<T> main,
                                                                        java.lang.Object object)
Subtracts a single object from an array.

Parameters:
main - array to have value removed from it.
object - to be removed
Returns:
array after performing subtraction.

arrayByAddingObjectsFromArrayWithoutDuplicates

public static <T> com.webobjects.foundation.NSArray<T> arrayByAddingObjectsFromArrayWithoutDuplicates(com.webobjects.foundation.NSArray<? extends T> a1,
                                                                                                      com.webobjects.foundation.NSArray<? extends T> a2)
Creates an array preserving order by adding all of the non-duplicate values from the second array to the first.

Parameters:
a1 - first array
a2 - second array
Returns:
array containing all of the elements of the first array and all of the non-duplicate elements of the second array.

arrayByRemovingFirstObject

public static <T> com.webobjects.foundation.NSArray<T> arrayByRemovingFirstObject(com.webobjects.foundation.NSArray<T> array)
Creates an array that has all of the objects of the parameter array without the first object.

Parameters:
array - the array to use to create the result
Returns:
an array containing all objects but the first of the parameter array. if null is passed, null is returned. if the parameter array is empty, an empty array is returned.

safeAddObject

public static <T> void safeAddObject(com.webobjects.foundation.NSMutableArray<T> array,
                                     T object)
Adds the object to the mutable array if the object is not null.

Parameters:
array - mutable array where non-null object will be added
object - to be added to array

addObjectsFromArrayWithoutDuplicates

public static <T> void addObjectsFromArrayWithoutDuplicates(com.webobjects.foundation.NSMutableArray<T> a1,
                                                            com.webobjects.foundation.NSArray<? extends T> a2)
Adds all of the non-duplicate elements from the second array to the mutable array.

Parameters:
a1 - mutable array where non-duplicate objects are added
a2 - array to be added to a1

flatten

public static com.webobjects.foundation.NSArray flatten(com.webobjects.foundation.NSArray<?> originalArray,
                                                        boolean filterDuplicates)
Recursively flattens an array of arrays and individual objects into a single array of elements.

For example:
NSArray foos; //Assume exists
NSArray bars = (NSArray)foos.valueForKey("toBars"); In this case if foos contained five elements then the array bars will contain five arrays each corresponding to what aFoo.toBars would return. To have the entire collection of bars in one single array you would call: NSArray allBars = flatten(bars)

Parameters:
originalArray - array to be flattened
filterDuplicates - determines if the duplicate values should be filtered
Returns:
an array containing all of the elements from all of the arrays contained within the array passed in. (Optionally, with duplicate elements filtered out)

flatten

public static com.webobjects.foundation.NSArray flatten(com.webobjects.foundation.NSArray<?> originalArray)
Recursively flattens an array of arrays and individual objects into a single array of elements.

For example:
NSArray foos; //Assume exists
NSArray bars = (NSArray)foos.valueForKey("toBars"); In this case if foos contained five elements then the array bars will contain five arrays each corresponding to what aFoo.toBars would return. To have the entire collection of bars in one single array you would call: NSArray allBars = flatten(bars)

Parameters:
originalArray - array to be flattened
Returns:
an array containing all of the elements from all of the arrays contained within the array passed in.

arrayFromPropertyList

public static com.webobjects.foundation.NSArray arrayFromPropertyList(java.lang.String name,
                                                                      com.webobjects.foundation.NSBundle bundle)
Creates an NSArray from a resource associated with a given bundle that is in property list format.

Parameters:
name - name of the file or resource.
bundle - NSBundle to which the resource belongs.
Returns:
NSArray de-serialized from the property list.

valuesForKeyPaths

public static com.webobjects.foundation.NSArray valuesForKeyPaths(java.lang.Object array,
                                                                  com.webobjects.foundation.NSArray<java.lang.String> paths)
Performs multiple key-value coding calls against an array or an object.

Parameters:
array - collection or object to be acted upon.
paths - array of keypaths.
Returns:
for collections, returns an array containing an array of values for every keypath. For objects, returns an array containing a value for every keypath.

firstObject

public static <T> T firstObject(com.webobjects.foundation.NSArray<T> array)
Returns the first object of the array. If the array is null or empty, null is returned.

Parameters:
array - the array to search.
Returns:
the first object in array. null if array is empty or if array is null.

indexOfFirstObjectWithValueForKeyPath

public static int indexOfFirstObjectWithValueForKeyPath(com.webobjects.foundation.NSArray<?> array,
                                                        java.lang.Object value,
                                                        java.lang.String keyPath)
Finds the index of the first object in the array with a given value for a given keypath. Assumes that all objects in the array either are NSKeyValueCoding.NullValue or have the given keypath.

Parameters:
array - the array to search.
value - the value to look for.
keyPath - the keypath to use to compare to value.
Returns:
index of the first object with the qualification. -1 if none matches.

firstObjectWithValueForKeyPath

public static <T> T firstObjectWithValueForKeyPath(com.webobjects.foundation.NSArray<T> array,
                                                   java.lang.Object value,
                                                   java.lang.String keyPath)
Finds the first object in the array with a given value for a given key path.

Parameters:
array - the array to search.
value - the value to look for.
keyPath - the keypath to use to compare to value.
Returns:
first object in the array with the qualification. null if none matches.

objectsWithValueForKeyPath

public static <T> com.webobjects.foundation.NSArray<T> objectsWithValueForKeyPath(com.webobjects.foundation.NSArray<T> array,
                                                                                  java.lang.Object valueToLookFor,
                                                                                  java.lang.String keyPath)
Walks over an array and returns an array of objects from that array that have a particular value for a particular key path. Treats null and NSKeyValueCoding.NullValue equivalently. Any NSKeyValueCoding.NullValue objects in the array are skipped. If array is null or empty, an empty array is returned.

Parameters:
array - array to search
valueToLookFor - value to look for
keyPath - key path to apply on each object on the array to compare against valueToLookFor
Returns:
an array of matching objects

indexOfObjectUsingEqualator

public static <T> int indexOfObjectUsingEqualator(com.webobjects.foundation.NSArray<T> array,
                                                  T object,
                                                  ERXEqualator equalator)
Locates an object within an array using a custom equality check provided as an ERXEqualator. This is useful if you have an array of EOs and want to find a particular EO in it without regard to editing contexts.

Parameters:
array - the array to search.
object - the object to look for.
equalator - the equalator to use for performing the equality check between object and each object in the array.
Returns:
index of first occuring object in the array that is defined as equal by the equalator. -1 if no such object is found.

sortedMutableArraySortedWithKey

public static <T> com.webobjects.foundation.NSMutableArray<T> sortedMutableArraySortedWithKey(com.webobjects.foundation.NSArray<T> array,
                                                                                              java.lang.String key)
Sorts a given array with a key in ascending fashion and returns a mutable clone of the result.

Parameters:
array - array to be sorted.
key - sort key.
Returns:
mutable clone of sorted array.

sortedArraySortedWithKey

public static <T> com.webobjects.foundation.NSArray<T> sortedArraySortedWithKey(com.webobjects.foundation.NSArray<T> array,
                                                                                java.lang.String key)
Sorts a given array with a key in ascending fashion.

Parameters:
array - array to be sorted.
key - sort key.
Returns:
mutable clone of sorted array.

sortedArraySortedWithKey

public static <T> com.webobjects.foundation.NSArray<T> sortedArraySortedWithKey(com.webobjects.foundation.NSArray<T> array,
                                                                                java.lang.String key,
                                                                                com.webobjects.foundation.NSSelector selector)
Sorts a given array with a key in ascending fashion.

Parameters:
array - array to be sorted.
key - sort key.
selector - sort order selector to use, if null, then sort will be case insensitive ascending.
Returns:
sorted array.

sortedArraySortedWithKeys

public static <T> com.webobjects.foundation.NSArray<T> sortedArraySortedWithKeys(com.webobjects.foundation.NSArray<T> array,
                                                                                 com.webobjects.foundation.NSArray<java.lang.String> keys,
                                                                                 com.webobjects.foundation.NSSelector selector)
Sorts a given array with a set of keys according to the given selector.

Parameters:
array - array to be sorted.
keys - sort keys
selector - sort order selector to use, if null, then sort will be case insensitive ascending.
Returns:
sorted array.

sortArrayWithKey

public static void sortArrayWithKey(com.webobjects.foundation.NSMutableArray<?> array,
                                    java.lang.String key)
Sorts a given mutable array with a key in place.

Parameters:
array - array to be sorted.
key - sort key.

sortArrayWithKey

public static void sortArrayWithKey(com.webobjects.foundation.NSMutableArray<?> array,
                                    java.lang.String key,
                                    com.webobjects.foundation.NSSelector selector)
Sorts a given mutable array with a key in place.

Parameters:
array - array to be sorted.
key - sort key.
selector - sort order selector to use, if null, then sort will be ascending.

initialize

public static void initialize()
Will register new NSArray operators sort, sortAsc, sortDesc, sortInsensitiveAsc, sortInsensitiveDesc, unique, flatten, reverse, limit, and fetchSpec


median

public static java.lang.Number median(com.webobjects.foundation.NSArray<?> array,
                                      java.lang.String keypath)
Calculates the median value of an array. The median is the value for which half of the elements are above and half the elements are below. As such, an array sort is needed and this might be very costly depending of the size of the array.

Parameters:
array - array of objects
keypath - key path for the median
Returns:
the median value

stdDev

public static java.lang.Number stdDev(com.webobjects.foundation.NSArray<?> array,
                                      java.lang.String keypath,
                                      boolean isPopulation)
Finds the standard deviation of the numeric values found in the array at the specified keypath. If the keypath is null or empty, then the array values are used instead. If the array has fewer than two objects, null is returned. If isPopulation is true, the population standard deviation is calculated. If isPopulation is false, the sample standard deviation is calculated. Use a true value for isPopulation if you know the values for an entire population and false if you are dealing with a sample.

Parameters:
array - an array of objects
keypath - a key path to a numeric value on each object
isPopulation -
Returns:
the standard deviation for the numeric values

distinct

public static <T> com.webobjects.foundation.NSArray<T> distinct(com.webobjects.foundation.NSArray<T> array)
Shorter name for arrayWithoutDuplicates, which I always forget the name of.

Type Parameters:
T - type of the array
Parameters:
array - the array to return distinct values from
Returns:
an array of distinct elements from the input array

arrayWithoutDuplicates

public static <T> com.webobjects.foundation.NSArray<T> arrayWithoutDuplicates(com.webobjects.foundation.NSArray<T> anArray)
Filters out all of the duplicate objects in a given array.
Preserves the order now.

Parameters:
anArray - to be filtered
Returns:
filtered array.

batchedArrayWithSize

public static <T> com.webobjects.foundation.NSArray<com.webobjects.foundation.NSArray<T>> batchedArrayWithSize(com.webobjects.foundation.NSArray<T> array,
                                                                                                               int batchSize)
Batches an NSArray into sub-arrays of the given size.

Parameters:
array - array to batch
batchSize - number of items in each batch
Returns:
NSArray of NSArrays, each with at most batchSize items

filteredArrayWithEntityFetchSpecification

public static <T> com.webobjects.foundation.NSArray<T> filteredArrayWithEntityFetchSpecification(com.webobjects.foundation.NSArray<T> array,
                                                                                                 java.lang.String entity,
                                                                                                 java.lang.String fetchSpec,
                                                                                                 com.webobjects.foundation.NSDictionary<java.lang.String,?> bindings)
Filters a given array with a named fetch specification and bindings.

Parameters:
array - array to be filtered.
fetchSpec - name of the EOQualifierEvaluation.
entity - name of the EOEntity to which the fetch specification is associated.
bindings - bindings dictionary for qualifier variable substitution.
Returns:
array filtered and sorted by the named fetch specification.

filteredArrayWithFetchSpecificationNamedEntityNamedBindings

public static <T> com.webobjects.foundation.NSArray<T> filteredArrayWithFetchSpecificationNamedEntityNamedBindings(com.webobjects.foundation.NSArray<T> array,
                                                                                                                   java.lang.String fetchSpec,
                                                                                                                   java.lang.String entity,
                                                                                                                   com.webobjects.foundation.NSDictionary<java.lang.String,?> bindings)
Deprecated. 


filteredArrayWithFetchSpecificationNamedEntityNamed

public static <T> com.webobjects.foundation.NSArray<T> filteredArrayWithFetchSpecificationNamedEntityNamed(com.webobjects.foundation.NSArray<T> array,
                                                                                                           java.lang.String fetchSpec,
                                                                                                           java.lang.String entity)
Deprecated. 


filteredArrayWithEntityFetchSpecification

public static <T> com.webobjects.foundation.NSArray<T> filteredArrayWithEntityFetchSpecification(com.webobjects.foundation.NSArray<T> array,
                                                                                                 java.lang.String entity,
                                                                                                 java.lang.String fetchSpec)
Filters a given array with a named fetch specification.

Parameters:
array - array to be filtered.
fetchSpec - name of the EOQualifierEvaluation.
entity - name of the EOEntity to which the fetch specification is associated.
Returns:
array filtered and sorted by the named fetch specification.

shiftObjectLeft

public static <T> void shiftObjectLeft(com.webobjects.foundation.NSMutableArray<T> array,
                                       T object)
shifts a given object in an array one value to the left (index--).

Parameters:
array - array to be modified.
object - the object that should be moved

shiftObjectRight

public static <T> void shiftObjectRight(com.webobjects.foundation.NSMutableArray<T> array,
                                        T object)
shifts a given object in an array one value to the right (index++).

Parameters:
array - array to be modified.
object - the object that should be moved

arrayContainsAnyObjectFromArray

public static <T> boolean arrayContainsAnyObjectFromArray(com.webobjects.foundation.NSArray<? extends T> array,
                                                          com.webobjects.foundation.NSArray<? extends T> objects)
Function to determine if an array contains any of the elements of another array.

Parameters:
array - to test if it contains any of the objects
objects - array of objects to test if the first array contains any of
Returns:
if the first array contains any elements from the second array

arrayContainsArray

public static <T> boolean arrayContainsArray(com.webobjects.foundation.NSArray<? extends T> array,
                                             com.webobjects.foundation.NSArray<? extends T> objects)
Function to determine if an array contains all of the elements of another array.

Parameters:
array - to test if it contains all of the objects of another array
objects - array of objects to test if the first array contains all of
Returns:
if the first array contains all of the elements from the second array

intersectingElements

public static <T> com.webobjects.foundation.NSArray<T> intersectingElements(com.webobjects.foundation.NSArray<? extends T> array1,
                                                                            com.webobjects.foundation.NSArray<? extends T> array2)
Intersects the elements of two arrays. This has the effect of stripping out duplicates.

Parameters:
array1 - the first array
array2 - the second array
Returns:
the intersecting elements

reverse

public static <T> com.webobjects.foundation.NSArray<T> reverse(com.webobjects.foundation.NSArray<T> array)
Reverses the elements of an array

Parameters:
array - to be reversed
Returns:
reverse ordered array

friendlyDisplayForKeyPath

public static java.lang.String friendlyDisplayForKeyPath(com.webobjects.foundation.NSArray<?> list,
                                                         java.lang.String attribute,
                                                         java.lang.String nullArrayDisplay,
                                                         java.lang.String separator,
                                                         java.lang.String finalSeparator)
Displays a list of attributes off of objects in a 'friendly' manner.

For example, given an array containing three user objects and the attribute key "firstName", the result of calling this method would be the string: "Max, Anjo and Patrice".

Parameters:
list - of objects to be displayed in a friendly manner
attribute - key to be called on each object in the list
nullArrayDisplay - string to be returned if the list is null or empty
separator - string to be used for the first items
finalSeparator - used between the last items
Returns:
friendly display string

arrayForKeysPath

public static com.webobjects.foundation.NSArray<?> arrayForKeysPath(com.webobjects.foundation.NSArray<?> array,
                                                                    com.webobjects.foundation.NSArray<java.lang.String> keys)
Returns an array of dictionaries containing the key/value pairs for the given paths.

Parameters:
array - array of objects
keys - array of keys
Returns:
array of dictionaries containing values for the key paths

removeNullValues

public static <T> com.webobjects.foundation.NSArray<T> removeNullValues(com.webobjects.foundation.NSArray<T> array)
Removes all occurencies of NSKeyValueCoding.NullValue in the provided array

Parameters:
array - the array from which the NullValue should be removed
Returns:
a new NSArray with the same order than the original array but without NSKeyValueCoding.NullValue objects

removeNullValues

public static <T> com.webobjects.foundation.NSArray<T> removeNullValues(com.webobjects.foundation.NSArray<T> target,
                                                                        com.webobjects.foundation.NSArray<T> array)
Removes all occurencies of NSKeyValueCoding.NullValue in the provided array

Parameters:
target - array to remove objects from
array - array of values
Returns:
a new NSArray with the same order than the original array but without NSKeyValueCoding.NullValue objects

objectArrayCastToStringArray

public static java.lang.String[] objectArrayCastToStringArray(java.lang.Object[] o)
Converts an Object array to a String array by casting each element. This is analogus to String[] myStringArray = (String[])myObjectArray; except that it creates a clone of the array.

Parameters:
o - an Object array containing String elements
Returns:
a String array containing the same elements

objectArrayToString

public static java.lang.String objectArrayToString(java.lang.Object[] o)
pretty prints an Object array which is ugly when using toString

Parameters:
o - the object which one wants to print as a String
Returns:
the String which can be used in lets say log.info("my array = "+ERXArrayUtilities.objectArrayToString(myArray));

objectArrayToString

public static java.lang.String objectArrayToString(java.lang.Object[][] array)
pretty prints a two dimensional Object array which is ugly when using toString

Parameters:
array - the object which one wants to print as a String
Returns:
the String which can be used in lets say log.info("my array = "+ERXArrayUtilities.objectArrayToString(myArray));

objectArraysToString

public static java.lang.String objectArraysToString(com.webobjects.foundation.NSArray<java.lang.Object[][]> array)
pretty prints a NSArray of two dimensional Object array which is ugly when using toString

Parameters:
array - the object which one wants to print as a String
Returns:
the String which can be used in lets say log.info("my array = "+ERXArrayUtilities.objectArrayToString(myArray));

removeNullValuesFromEnd

public static <T> com.webobjects.foundation.NSArray<T> removeNullValuesFromEnd(com.webobjects.foundation.NSArray<T> array)
removes all occurencies of NSKeyValueCoding.Null from the end of the array

Parameters:
array - the array from which the values should be removed
Returns:
a new NSArray which does not have NSKeyValueCoding.Null instances at the end

toStringArray

public static java.lang.String[] toStringArray(com.webobjects.foundation.NSArray<?> a)

dictionaryOfObjectsIndexedByKeyPath

public static <K,T> com.webobjects.foundation.NSDictionary<K,T> dictionaryOfObjectsIndexedByKeyPath(com.webobjects.foundation.NSArray<T> array,
                                                                                                    java.lang.String keyPath)
Calls dictionaryOfObjectsIndexedByKeyPathThrowOnCollision() passing false for throwOnCollision.


dictionaryOfObjectsIndexedByKeyPathThrowOnCollision

public static <K,T> com.webobjects.foundation.NSDictionary<K,T> dictionaryOfObjectsIndexedByKeyPathThrowOnCollision(com.webobjects.foundation.NSArray<T> array,
                                                                                                                    java.lang.String keyPath,
                                                                                                                    boolean throwOnCollision)
Given an array of objects, returns a dictionary mapping the value by performing valueForKeyPath on each object in the array to the object in the array. This is similar in concept to but different in semantic from arrayGroupedByKeyPath(). That method is focused on multiple objects returning the same value for the keypath and, so, objects are grouped into arrays. That is not particularly useful when there aren't collisions in the array or when you don't care if there are collisions. For example, with a CreditCard EO object, one could rely on the paymentType.name value to be unique and thus you're more interested in being able to rapidly get to the EO. arrayGroupedByKeyPath() would require either flattening out the arrays or navigating them everytime.

Parameters:
array - array to index
keyPath - keyPath to index. if any object returns null of NSKeyValueCoding.NullValue for this keyPath, the object is not put into the resulting dictionary.
throwOnCollision - if true and two objects in the array have the same non-null (or non-NullValue) value for keyPath, an exception is thrown. if false, the last object in the array wins.
Returns:
a dictionary indexing the given array. if array is null, an empty dictionary is returned.

arrayBySelectingInstancesOfClass

public static <T> com.webobjects.foundation.NSArray<T> arrayBySelectingInstancesOfClass(com.webobjects.foundation.NSArray<?> array,
                                                                                        java.lang.Class<T> aClass)
Prunes an array for only instances of the given class.

Parameters:
array - array to process
aClass - class to use. null results in the result being a copy of the array.
Returns:
an array which is a subset of the array where each object in the result is an instance of aClass.

sortedArrayUsingComparator

public static <T> com.webobjects.foundation.NSArray<T> sortedArrayUsingComparator(com.webobjects.foundation.NSArray<T> array,
                                                                                  com.webobjects.foundation.NSComparator comparator)
Just like the method NSArray#sortedArrayUsingComparator(NSComparator), except it catches the NSComparator.ComparisonException and, if thrown, it wraps it in a runtime exception. Returns null when passed null for array.

Type Parameters:
T -
Parameters:
array -
comparator -
Returns:
the sorted array

arrayWithObjectsSwapped

public static <T> com.webobjects.foundation.NSArray<T> arrayWithObjectsSwapped(com.webobjects.foundation.NSArray<T> array,
                                                                               java.lang.Object object1,
                                                                               java.lang.Object object2)
Swaps the two given Objects in the given NSArray and returns a new NSArray. If one of the Objects is not element of the NSArray a RuntimeException will be thrown.

Type Parameters:
T -
Parameters:
array - in that the two given Objects have to be swapped
object1 - one object in the NSArray that will be swapped
object2 - the other object in the NSArray that will be swapped
Returns:
the new NSArray with the swapped elements
Throws:
{@link - RuntimeException} if one of the Objects is not in the NSArray
Author:
edgar - Jan 7, 2008

arrayWithObjectsAtIndexesSwapped

public static <T> com.webobjects.foundation.NSArray<T> arrayWithObjectsAtIndexesSwapped(com.webobjects.foundation.NSArray<T> array,
                                                                                        int indexOfObject1,
                                                                                        int indexOfObject2)
Swaps the two objects at the given indexes in the given NSArray and returns a new NSArray.

Parameters:
array - in that the two Objects at the given indexes have to be swapped
indexOfObject1 - index of one object in the NSArray that will be swapped
indexOfObject2 - index of the other object in the NSArray that will be swapped
Returns:
the new NSArray with the swapped elements
Throws:
{@link - RuntimeException} if one of the indexes is out of bound
Author:
edgar - Jan 7, 2008

swapObjectsInArray

public static <T> void swapObjectsInArray(com.webobjects.foundation.NSMutableArray<T> array,
                                          T a,
                                          T b)
Swaps two objects a and b in an array inplace

Parameters:
array - the array
a - - first object
b - - second object
Throws:
{@link - RuntimeException} if one or both indexes are out of bounds
Author:
cug - Jan 7, 2008

swapObjectsAtIndexesInArray

public static <T> void swapObjectsAtIndexesInArray(com.webobjects.foundation.NSMutableArray<T> array,
                                                   int indexOfA,
                                                   int indexOfB)
Swaps two objects at the given indexes in an array inplace

Parameters:
array - the array
indexOfA - - index of the first object
indexOfB - - index of the second object
Throws:
{@link - RuntimeException} if one or both indexes are out of bounds
Author:
cug - Jan 7, 2008

swapObjectWithObjectAtIndexInArray

public static <T> void swapObjectWithObjectAtIndexInArray(com.webobjects.foundation.NSMutableArray<T> array,
                                                          T a,
                                                          int indexOfB)
Swaps the object a with the object at the given index

Parameters:
array - the array
a - - first object
indexOfB - - index of second object
Author:
edgar - Apr 14, 2008

deepClone

public static <T> com.webobjects.foundation.NSArray<T> deepClone(com.webobjects.foundation.NSArray<T> array,
                                                                 boolean onlyCollections)
Returns a deep clone of the given array. A deep clone will attempt to clone the values of this array as well as the array itself.

Parameters:
array - the array to clone
onlyCollections - if true, only collections in this array will be cloned, not individual values
Returns:
a deep clone of array

deepClone

public static <T> com.webobjects.foundation.NSSet<T> deepClone(com.webobjects.foundation.NSSet<T> set,
                                                               boolean onlyCollections)
Returns a deep clone of the given set. A deep clone will attempt to clone the values of this set as well as the set itself.

Parameters:
set - the set to clone
onlyCollections - if true, only collections in this array will be cloned, not individual values
Returns:
a deep clone of set

Last updated: Tue, Feb 21, 2017 • 05:45 PM CET

Copyright © 2002 – 2007 Project Wonder.