ERXArrayUtilities Class Reference

Collaboration diagram for ERXArrayUtilities:

Collaboration graph
[legend]

List of all members.

Classes

class  AvgNonNullOperator
class  BaseOperator
class  FetchSpecOperator
class  FlattenOperator
class  IsEmptyOperator
class  LimitOperator
class  MedianOperator
class  ObjectAtIndexOperator
class  RemoveNullValuesOperator
class  ReverseOperator
class  SortOperator
class  StandardDeviationOperator
class  SubarrayWithRangeOperator
class  UniqueOperator

Static Public Member Functions

static< T > void addObjectsFromArrayWithoutDuplicates (NSMutableArray< T > a1, NSArray<?extends T > a2)
static< T > NSArray< T > arrayByAddingObjectsFromArrayWithoutDuplicates (NSArray<?extends T > a1, NSArray<?extends T > a2)
static< T > NSArray< T > arrayByRemovingFirstObject (NSArray< T > array)
static< T > NSArray< T > arrayBySelectingInstancesOfClass (final NSArray<?> array, final Class< T > aClass)
static< T > boolean arrayContainsAnyObjectFromArray (NSArray<?extends T > array, NSArray<?extends T > objects)
static< T > boolean arrayContainsArray (NSArray<?extends T > array, NSArray<?extends T > objects)
static NSArray<?> arrayForKeysPath (NSArray<?> array, NSArray< String > keys)
static NSArray arrayFromPropertyList (String name, NSBundle bundle)
static NSDictionary arrayGroupedByKeyPath (NSArray objects, String keyPath, Object nullGroupingKey, String valueKeyPath)
static< T, K, V > NSDictionary
< K, NSArray< V > > 
arrayGroupedByKeyPath (NSArray< T > objects, ERXKey< K > keyPath, K nullGroupingKey, ERXKey< V > valueKeyPath)
static< T, K, V > NSDictionary
< K, NSArray< V > > 
arrayGroupedByKeyPath (NSArray< T > objects, String keyPath, boolean includeNulls, String valueKeyPath)
static< T, K, V > NSDictionary
< K, NSArray< V > > 
arrayGroupedByKeyPath (NSArray< T > objects, ERXKey< K > keyPath, boolean includeNulls, ERXKey< V > valueKeyPath)
static< K, V > NSDictionary< K,
NSArray< V > > 
arrayGroupedByKeyPath (NSArray< V > objects, String keyPath)
static< K, V > NSDictionary< K,
NSArray< V > > 
arrayGroupedByKeyPath (NSArray< V > objects, ERXKey< K > keyPath)
static NSDictionary arrayGroupedByToManyKeyPath (NSArray objects, String keyPath, Object nullGroupingKey, String valueKeyPath)
static< T, K, V > NSDictionary
< K, NSArray< V > > 
arrayGroupedByToManyKeyPath (NSArray< T > objects, ERXKey< K > keyPath, K nullGroupingKey, ERXKey< V > valueKeyPath)
static< K, V > NSDictionary< K,
NSArray< V > > 
arrayGroupedByToManyKeyPath (NSArray< V > objects, String keyPath, K nullGroupingKey)
static< K, V > NSDictionary< K,
NSArray< V > > 
arrayGroupedByToManyKeyPath (NSArray< V > objects, ERXKey< K > keyPath, K nullGroupingKey)
static< K, V > NSDictionary< K,
NSArray< V > > 
arrayGroupedByToManyKeyPath (NSArray< V > objects, String keyPath, boolean includeNulls)
static< K, V > NSDictionary< K,
NSArray< V > > 
arrayGroupedByToManyKeyPath (NSArray< V > objects, ERXKey< K > keyPath, boolean includeNulls)
static< T > NSArray< T > arrayMinusArray (NSArray< T > main, NSArray<?> minus)
static< T > NSArray< T > arrayMinusObject (NSArray< T > main, Object object)
static< T > boolean arraysAreIdenticalSets (NSArray<?super T > a1, NSArray<?super T > a2)
static< T > NSArray< T > arrayWithObjectsAtIndexesSwapped (final NSArray< T > array, final int indexOfObject1, final int indexOfObject2)
static< T > NSArray< T > arrayWithObjectsSwapped (final NSArray< T > array, final Object object1, final Object object2)
static< T > NSArray< T > arrayWithoutDuplicateKeyValue (NSArray< T > objects, String key)
static< T > NSArray< T > arrayWithoutDuplicates (NSArray< T > anArray)
static< T > NSArray< NSArray< T > > batchedArrayWithSize (NSArray< T > array, int batchSize)
static< T > NSSet< T > deepClone (NSSet< T > set, boolean onlyCollections)
static< T > NSArray< T > deepClone (NSArray< T > array, boolean onlyCollections)
static< K, T > NSDictionary< K, T > dictionaryOfObjectsIndexedByKeyPath (final NSArray< T > array, final String keyPath)
static< K, T > NSDictionary< K, T > dictionaryOfObjectsIndexedByKeyPathThrowOnCollision (final NSArray< T > array, final String keyPath, final boolean throwOnCollision)
static< T > NSArray< T > distinct (NSArray< T > array)
static boolean enumerationHasMatchWithQualifierEvaluation (Enumeration<?> enumeration, EOQualifierEvaluation qualifier)
static< T > NSArray< T > filteredArrayWithEntityFetchSpecification (NSArray< T > array, String entity, String fetchSpec)
static< T > NSArray< T > filteredArrayWithEntityFetchSpecification (NSArray< T > array, String entity, String fetchSpec, NSDictionary< String,?> bindings)
static< T > NSArray< T > filteredArrayWithFetchSpecificationNamedEntityNamed (NSArray< T > array, String fetchSpec, String entity)
static< T > NSArray< T > filteredArrayWithFetchSpecificationNamedEntityNamedBindings (NSArray< T > array, String fetchSpec, String entity, NSDictionary< String,?> bindings)
static< T > NSArray< T > filteredArrayWithQualifierEvaluation (Iterator< T > iterator, EOQualifierEvaluation qualifier)
static< T > NSArray< T > filteredArrayWithQualifierEvaluation (Enumeration< T > enumeration, EOQualifierEvaluation qualifier)
static< T > NSArray< T > filteredArrayWithQualifierEvaluation (NSArray< T > array, EOQualifierEvaluation qualifier)
static< T > T firstObject (NSArray< T > array)
static< T > T firstObjectWithValueForKeyPath (NSArray< T > array, Object value, String keyPath)
static NSArray flatten (NSArray<?> originalArray)
static NSArray flatten (NSArray<?> originalArray, boolean filterDuplicates)
static String friendlyDisplayForKeyPath (NSArray<?> list, String attribute, String nullArrayDisplay, String separator, String finalSeparator)
static int indexOfFirstObjectWithValueForKeyPath (NSArray<?> array, Object value, String keyPath)
static< T > int indexOfObjectUsingEqualator (NSArray< T > array, T object, ERXEqualator equalator)
static void initialize ()
static< T > NSArray< T > intersectingElements (NSArray<?extends T > array1, NSArray<?extends T > array2)
static boolean iteratorHasMatchWithQualifierEvaluation (Iterator<?> iterator, EOQualifierEvaluation qualifier)
static Number median (NSArray<?> array, String keypath)
static String[] objectArrayCastToStringArray (Object[] o)
static String objectArraysToString (NSArray< Object[][]> array)
static String objectArrayToString (Object[][] array)
static String objectArrayToString (Object[] o)
static< T > NSArray< T > objectsWithValueForKeyPath (final NSArray< T > array, final Object valueToLookFor, final String keyPath)
static< T > NSArray< T > removeNullValues (NSArray< T > target, NSArray< T > array)
static< T > NSArray< T > removeNullValues (NSArray< T > array)
static< T > NSArray< T > removeNullValuesFromEnd (NSArray< T > array)
static< T > NSArray< T > reverse (NSArray< T > array)
static< T > void safeAddObject (NSMutableArray< T > array, T object)
static< T > NSSet< T > setFromArray (NSArray< T > array)
static< T > void shiftObjectLeft (NSMutableArray< T > array, T object)
static< T > void shiftObjectRight (NSMutableArray< T > array, T object)
static void sortArrayWithKey (NSMutableArray<?> array, String key, NSSelector selector)
static void sortArrayWithKey (NSMutableArray<?> array, String key)
static< T > NSArray< T > sortedArraySortedWithKey (NSArray< T > array, String key, NSSelector selector)
static< T > NSArray< T > sortedArraySortedWithKey (NSArray< T > array, String key)
static< T > NSArray< T > sortedArraySortedWithKeys (NSArray< T > array, NSArray< String > keys, NSSelector selector)
static< T > NSArray< T > sortedArrayUsingComparator (final NSArray< T > array, final NSComparator comparator)
static< T > NSMutableArray< T > sortedMutableArraySortedWithKey (NSArray< T > array, String key)
static NSSelector sortSelectorWithKey (String key)
static Number stdDev (NSArray<?> array, String keypath, boolean isPopulation)
static< T > void swapObjectsAtIndexesInArray (NSMutableArray< T > array, int indexOfA, int indexOfB)
static< T > void swapObjectsInArray (NSMutableArray< T > array, T a, T b)
static< T > void swapObjectWithObjectAtIndexInArray (NSMutableArray< T > array, T a, int indexOfB)
static String[] toStringArray (NSArray<?> a)
static NSArray valuesForKeyPaths (Object array, NSArray< String > paths)

Static Public Attributes

static final String NULL_GROUPING_KEY = "**** NULL GROUPING KEY ****"

Static Private Attributes

static final NSDictionary
< String, NSSelector > 
_selectorsByKey
static boolean initialized = false
static Logger log = Logger.getLogger(ERXArrayUtilities.class)


Detailed Description

Collection of NSArray utilities.

Member Function Documentation

static <T> void addObjectsFromArrayWithoutDuplicates ( NSMutableArray< T >  a1,
NSArray<?extends T >  a2 
) [static]

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

static <T> NSArray<T> arrayByAddingObjectsFromArrayWithoutDuplicates ( NSArray<?extends T >  a1,
NSArray<?extends T >  a2 
) [static]

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.

static <T> NSArray<T> arrayByRemovingFirstObject ( NSArray< T >  array  )  [static]

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.

static <T> NSArray<T> arrayBySelectingInstancesOfClass ( final NSArray<?>  array,
final Class< T >  aClass 
) [static]

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.

static <T> boolean arrayContainsAnyObjectFromArray ( NSArray<?extends T >  array,
NSArray<?extends T >  objects 
) [static]

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

static <T> boolean arrayContainsArray ( NSArray<?extends T >  array,
NSArray<?extends T >  objects 
) [static]

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

static NSArray<?> arrayForKeysPath ( NSArray<?>  array,
NSArray< String keys 
) [static]

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

static NSArray arrayFromPropertyList ( String  name,
NSBundle  bundle 
) [static]

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.

static NSDictionary arrayGroupedByKeyPath ( NSArray  objects,
String  keyPath,
Object  nullGroupingKey,
String  valueKeyPath 
) [static]

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

static <T,K,V> NSDictionary<K, NSArray<V> > arrayGroupedByKeyPath ( NSArray< T >  objects,
ERXKey< K >  keyPath,
nullGroupingKey,
ERXKey< V >  valueKeyPath 
) [static]

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

static <T,K,V> NSDictionary<K, NSArray<V> > arrayGroupedByKeyPath ( NSArray< T >  objects,
String  keyPath,
boolean  includeNulls,
String  valueKeyPath 
) [static]

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

static <T,K,V> NSDictionary<K, NSArray<V> > arrayGroupedByKeyPath ( NSArray< T >  objects,
ERXKey< K >  keyPath,
boolean  includeNulls,
ERXKey< V >  valueKeyPath 
) [static]

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<T> objects, String keyPath, boolean includeNulls, String valueKeyPath).

See arrayGroupedByKeyPath(NSArray<T> 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

static <K,V> NSDictionary<K, NSArray<V> > arrayGroupedByKeyPath ( NSArray< V >  objects,
String  keyPath 
) [static]

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

static <K,V> NSDictionary<K, NSArray<V> > arrayGroupedByKeyPath ( NSArray< V >  objects,
ERXKey< K >  keyPath 
) [static]

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<V> objects, String keyPath).

See arrayGroupedByKeyPath(NSArray<V> 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

static NSDictionary arrayGroupedByToManyKeyPath ( NSArray  objects,
String  keyPath,
Object  nullGroupingKey,
String  valueKeyPath 
) [static]

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

static <T,K,V> NSDictionary<K, NSArray<V> > arrayGroupedByToManyKeyPath ( NSArray< T >  objects,
ERXKey< K >  keyPath,
nullGroupingKey,
ERXKey< V >  valueKeyPath 
) [static]

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

static <K,V> NSDictionary<K, NSArray<V> > arrayGroupedByToManyKeyPath ( NSArray< V >  objects,
String  keyPath,
nullGroupingKey 
) [static]

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

static <K,V> NSDictionary<K, NSArray<V> > arrayGroupedByToManyKeyPath ( NSArray< V >  objects,
ERXKey< K >  keyPath,
nullGroupingKey 
) [static]

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

static <K,V> NSDictionary<K, NSArray<V> > arrayGroupedByToManyKeyPath ( NSArray< V >  objects,
String  keyPath,
boolean  includeNulls 
) [static]

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

static <K,V> NSDictionary<K, NSArray<V> > arrayGroupedByToManyKeyPath ( NSArray< V >  objects,
ERXKey< K >  keyPath,
boolean  includeNulls 
) [static]

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

static <T> NSArray<T> arrayMinusArray ( NSArray< T >  main,
NSArray<?>  minus 
) [static]

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.

static <T> NSArray<T> arrayMinusObject ( NSArray< T >  main,
Object  object 
) [static]

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.

static <T> boolean arraysAreIdenticalSets ( NSArray<?super T >  a1,
NSArray<?super T >  a2 
) [static]

Simple comparision method to see if two array objects are identical sets.

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

static <T> NSArray<T> arrayWithObjectsAtIndexesSwapped ( final NSArray< T >  array,
final int  indexOfObject1,
final int  indexOfObject2 
) [static]

Swaps the two objects at the given indexes in the given NSArray and returns a new NSArray.

Author:
edgar - Jan 7, 2008
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
Exceptions:
{@link RuntimeException} if one of the indexes is out of bound

static <T> NSArray<T> arrayWithObjectsSwapped ( final NSArray< T >  array,
final Object  object1,
final Object  object2 
) [static]

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.

Author:
edgar - Jan 7, 2008
Parameters:
<T> 
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
Exceptions:
{@link RuntimeException} if one of the Objects is not in the NSArray

static <T> NSArray<T> arrayWithoutDuplicateKeyValue ( NSArray< T >  objects,
String  key 
) [static]

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.

static <T> NSArray<T> arrayWithoutDuplicates ( NSArray< T >  anArray  )  [static]

Filters out all of the duplicate objects in a given array.
Preserves the order now.

Parameters:
anArray to be filtered
Returns:
filtered array.

static <T> NSArray<NSArray<T> > batchedArrayWithSize ( NSArray< T >  array,
int  batchSize 
) [static]

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

static <T> NSSet<T> deepClone ( NSSet< T >  set,
boolean  onlyCollections 
) [static]

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

static <T> NSArray<T> deepClone ( NSArray< T >  array,
boolean  onlyCollections 
) [static]

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

static <K,T> NSDictionary<K, T> dictionaryOfObjectsIndexedByKeyPath ( final NSArray< T >  array,
final String  keyPath 
) [static]

Calls dictionaryOfObjectsIndexedByKeyPathThrowOnCollision() passing false for throwOnCollision.

static <K,T> NSDictionary<K, T> dictionaryOfObjectsIndexedByKeyPathThrowOnCollision ( final NSArray< T >  array,
final String  keyPath,
final boolean  throwOnCollision 
) [static]

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.

static <T> NSArray<T> distinct ( NSArray< T >  array  )  [static]

Shorter name for arrayWithoutDuplicates, which I always forget the name of.

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

static boolean enumerationHasMatchWithQualifierEvaluation ( Enumeration<?>  enumeration,
EOQualifierEvaluation  qualifier 
) [static]

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

static <T> NSArray<T> filteredArrayWithEntityFetchSpecification ( NSArray< T >  array,
String  entity,
String  fetchSpec 
) [static]

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.

static <T> NSArray<T> filteredArrayWithEntityFetchSpecification ( NSArray< T >  array,
String  entity,
String  fetchSpec,
NSDictionary< String,?>  bindings 
) [static]

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.

static <T> NSArray<T> filteredArrayWithFetchSpecificationNamedEntityNamed ( NSArray< T >  array,
String  fetchSpec,
String  entity 
) [static]

static <T> NSArray<T> filteredArrayWithFetchSpecificationNamedEntityNamedBindings ( NSArray< T >  array,
String  fetchSpec,
String  entity,
NSDictionary< String,?>  bindings 
) [static]

static <T> NSArray<T> filteredArrayWithQualifierEvaluation ( Iterator< T >  iterator,
EOQualifierEvaluation  qualifier 
) [static]

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.

static <T> NSArray<T> filteredArrayWithQualifierEvaluation ( Enumeration< T >  enumeration,
EOQualifierEvaluation  qualifier 
) [static]

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.

static <T> NSArray<T> filteredArrayWithQualifierEvaluation ( NSArray< T >  array,
EOQualifierEvaluation  qualifier 
) [static]

Filters an array using the EOQualifierEvaluation interface.

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

static <T> T firstObject ( NSArray< T >  array  )  [static]

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.

static <T> T firstObjectWithValueForKeyPath ( NSArray< T >  array,
Object  value,
String  keyPath 
) [static]

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.

static NSArray flatten ( NSArray<?>  originalArray  )  [static]

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.

static NSArray flatten ( NSArray<?>  originalArray,
boolean  filterDuplicates 
) [static]

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)

static String friendlyDisplayForKeyPath ( NSArray<?>  list,
String  attribute,
String  nullArrayDisplay,
String  separator,
String  finalSeparator 
) [static]

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

static int indexOfFirstObjectWithValueForKeyPath ( NSArray<?>  array,
Object  value,
String  keyPath 
) [static]

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.

static <T> int indexOfObjectUsingEqualator ( NSArray< T >  array,
object,
ERXEqualator  equalator 
) [static]

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.

static void initialize (  )  [static]

Will register new NSArray operators sort, sortAsc, sortDesc, sortInsensitiveAsc, sortInsensitiveDesc, unique, flatten, reverse, limit, and fetchSpec

static <T> NSArray<T> intersectingElements ( NSArray<?extends T >  array1,
NSArray<?extends T >  array2 
) [static]

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

static boolean iteratorHasMatchWithQualifierEvaluation ( Iterator<?>  iterator,
EOQualifierEvaluation  qualifier 
) [static]

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

static Number median ( NSArray<?>  array,
String  keypath 
) [static]

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

static String [] objectArrayCastToStringArray ( Object[]  o  )  [static]

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

static String objectArraysToString ( NSArray< Object[][]>  array  )  [static]

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));

static String objectArrayToString ( Object  array[][]  )  [static]

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));

static String objectArrayToString ( Object[]  o  )  [static]

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));

static <T> NSArray<T> objectsWithValueForKeyPath ( final NSArray< T >  array,
final Object  valueToLookFor,
final String  keyPath 
) [static]

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

static <T> NSArray<T> removeNullValues ( NSArray< T >  target,
NSArray< T >  array 
) [static]

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

static <T> NSArray<T> removeNullValues ( NSArray< T >  array  )  [static]

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

static <T> NSArray<T> removeNullValuesFromEnd ( NSArray< T >  array  )  [static]

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

static <T> NSArray<T> reverse ( NSArray< T >  array  )  [static]

Reverses the elements of an array

Parameters:
array to be reversed
Returns:
reverse ordered array

static <T> void safeAddObject ( NSMutableArray< T >  array,
object 
) [static]

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

static <T> NSSet<T> setFromArray ( NSArray< T >  array  )  [static]

Simply utility method to create a concrete set object from an array.

Parameters:
array of elements

static <T> void shiftObjectLeft ( NSMutableArray< T >  array,
object 
) [static]

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

static <T> void shiftObjectRight ( NSMutableArray< T >  array,
object 
) [static]

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

static void sortArrayWithKey ( NSMutableArray<?>  array,
String  key,
NSSelector  selector 
) [static]

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.

static void sortArrayWithKey ( NSMutableArray<?>  array,
String  key 
) [static]

Sorts a given mutable array with a key in place.

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

static <T> NSArray<T> sortedArraySortedWithKey ( NSArray< T >  array,
String  key,
NSSelector  selector 
) [static]

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.

static <T> NSArray<T> sortedArraySortedWithKey ( NSArray< T >  array,
String  key 
) [static]

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.

static <T> NSArray<T> sortedArraySortedWithKeys ( NSArray< T >  array,
NSArray< String keys,
NSSelector  selector 
) [static]

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.

static <T> NSArray<T> sortedArrayUsingComparator ( final NSArray< T >  array,
final NSComparator  comparator 
) [static]

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.

Parameters:
array 
comparator 
<T> 
Returns:
the sorted array

static <T> NSMutableArray<T> sortedMutableArraySortedWithKey ( NSArray< T >  array,
String  key 
) [static]

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.

static NSSelector sortSelectorWithKey ( String  key  )  [static]

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

static Number stdDev ( NSArray<?>  array,
String  keypath,
boolean  isPopulation 
) [static]

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

static <T> void swapObjectsAtIndexesInArray ( NSMutableArray< T >  array,
int  indexOfA,
int  indexOfB 
) [static]

Swaps two objects at the given indexes in an array inplace

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

static <T> void swapObjectsInArray ( NSMutableArray< T >  array,
a,
b 
) [static]

Swaps two objects a and b in an array inplace

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

static <T> void swapObjectWithObjectAtIndexInArray ( NSMutableArray< T >  array,
a,
int  indexOfB 
) [static]

Swaps the object a with the object at the given index

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

static String [] toStringArray ( NSArray<?>  a  )  [static]

static NSArray valuesForKeyPaths ( Object  array,
NSArray< String paths 
) [static]

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.


Member Data Documentation

final NSDictionary<String, NSSelector> _selectorsByKey [static, private]

Initial value:

new NSDictionary<String, NSSelector>(new NSSelector [] {
        EOSortOrdering.CompareAscending,
        EOSortOrdering.CompareCaseInsensitiveAscending,
        EOSortOrdering.CompareCaseInsensitiveDescending,
        EOSortOrdering.CompareDescending,
    }, new String [] {
        "compareAscending",
        "compareCaseInsensitiveAscending",
        "compareCaseInsensitiveDescending",
        "compareDescending",
    })
Caches sort orderings for given keys

boolean initialized = false [static, private]

caches if array utilities have been initialized

Logger log = Logger.getLogger(ERXArrayUtilities.class) [static, private]

final String NULL_GROUPING_KEY = "**** NULL GROUPING KEY ****" [static]

Holds the null grouping key for use when grouping objects based on a key that might return null and nulls are allowed


The documentation for this class was generated from the following file:

Generated on Sat May 26 06:43:12 2012 for Project Wonder by  doxygen 1.5.8