-
Notifications
You must be signed in to change notification settings - Fork 0
Array utils
The Arrays class of the JDK has many methods for dealing with arrays, such as:
Arrays#hashCode(boolean[])
Arrays#hashCode(byte[])
Arrays#hashCode(short[])
...
Arrays#hashCode(Object[])
Arrays whose component is a primitive type are not assignable to Object[], so if you deal with multiple array types, you can only type the array as Object. If you want to call a method on Arrays, you are thus forced to perform instanceof checks to call the right method:
Object numbers = new float[]{ 3.1f, 4.1f, 8.2f };
int hashCode;
if (numbers instanceof byte[]) {
hashCode = Arrays.hashCode((byte[]) numbers);
} else if (numbers instanceof short[]) {
hashCode = Arrays.hashCode((short[]) numbers);
// ...
} else if (numbers instanceof float[]) {
hashCode = Arrays.hashCode((float[]) numbers);
}
// etc.ArrayUtils circumvents this by checking the array type for you and delegating to the proper method:
int hashCode = ArrayUtils.hashCode(numbers);Additionally, there is no method in Arrays for sorting and searching in boolean[] arrays. ArrayUtils provides these implementations so that ArrayUtils#binarySearch and ArrayUtils#sort also support all array types.
As another convenience, ArrayUtils provides ArrayUtils#stream which will create a stream over the array's entries, boxing them:
Object numbers = new float[]{ 3.1f, 4.1f, 8.2f };
ArrayUtils.stream(numbers)
.filter(...)
.toList();Note that this method auto-boxes all array entries, so more specific approaches may be favorable if performance is important.
Given a Type, ArrayTypeUtils#getArrayProperty returns an object describing the type's array properties: the component type, and the dimension. For example:
Class<?> clazz = float[][].class;
ArrayTypeProperties properties = ArrayTypeUtils.getArrayProperty(clazz);
System.out.println("Component: " + properties.getComponentType()); // Component: float
System.out.println("Dimension: " + properties.getDimension()); // Dimension: 2This method also supports generic array types like T[] or List<String>[].
Documentation
Internal (for development)