Package civitas.celestis.util.array
Interface SafeArray<E>
- Type Parameters:
E- The type of element this array should hold
- All Superinterfaces:
BaseArray<E>,Iterable<E>,Serializable
- All Known Implementing Classes:
AtomicArray,FastArray,SyncArray
A type-safe array. Different implementations of type-safe arrays have different
approaches to thread safety.
Fast arrays drop all thread-safety
measures in pursuit of the best possible performance, while synchronized
and atomized arrays provide thread-safety at the cost of reduced
performance. The implementation should be chosen according to the specific needs of
the corresponding application.
Primitive types are supported by specialized array instances such as DoubleArray
or FloatArray. Primitive array instances can be obtained either through factory
methods such as DoubleArray.of(double...) or primitive mapper methods wuch as
mapToDouble(ToDoubleFunction)} or mapToFloat(ToFloatFunction).
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionAppend the provided arrayato the end of this array, then returns the resulting array.E[]array()Returns a primitive array containing the elements of this array in their proper order.static <E> AtomicArray<E>atomicCopyOf(SafeArray<? extends E> a) Creates a new atomic copy of the provided arraya.static <E> SafeArray<E>atomicOf(E... elements) Creates a new atomic array from the provided array of elements.booleanReturns whether this array contains the provided objectobj.booleancontainsAll(Iterable<?> i) Returns whether this array contains multiple objects.static <E> SafeArray<E>Creates a new thread-unsafe copy of the provided arraya.booleanChecks for equality between this array and the provided objectobj.voidFills this array with the provided valuev.voidFills every empty slot of this array with the provided valuev.voidFills every slot of this array between the range of[s, e)with the provided valuev.Tests each element of this array using the provided predicatef, collects all elements the predicate returnstrueto, then returns a new array containing only the filtered elements.voidforEach(BiConsumer<? super Integer, ? super E> a) Executes the provided actionaonce for each element of this array.voidExecutes the provided actionaonce for each element of this array.static <E> SafeArray<E>Creates a new type-safe array from a stream of values.get(int i) Returns theith element of this array.getOrDefault(int i, E e) Returns theith element of this array, but returns the provided fallback valueeinstead of the value at the specified index isnull.iterator()Returns an iterator over every element of this array.intlength()Returns the length of this array.list()Returns an unmodifiable list containing the elements of this array in their proper order.<F> SafeArray<F>Applies the provided mapper functionfto each element of this array, then returns a new array containing the return values of the functionf.mapToDouble(ToDoubleFunction<? super E> f) Applies the provided mapper functionfto each element of this array, then returns a new double array containing the return values of the functionf.mapToFloat(ToFloatFunction<? super E> f) Applies the provided mapper functionfto each element of this array, then returns a new float array containing the return values of the functionf.mapToInt(ToIntFunction<? super E> f) Applies the provided mapper functionfto each element of this array, then returns a new integer array containing the return values of the functionf.mapToLong(ToLongFunction<? super E> f) Applies the provided mapper functionfto each element of this array, then returns a new long array containing the return values of the functionf.<F,G> SafeArray<G> merge(SafeArray<F> a, BiFunction<? super E, ? super F, ? extends G> f) Between this array and the provided arraya, this applies the merger functionfto each corresponding pair of elements, then returns a new array containing the return values of the merger functionf.static <E> SafeArray<E>of(E... elements) Creates a new type-safe array from the provided array of elements.Prepends the provided arrayato the front of this array, then returns the resulting array.static <E> SafeArray<E>referenceOf(SafeArray<E> a) Creates a new reference to the provided arraya.static <E> SafeArray<E>referenceOf(E[] elements) Creates a new type-safe reference array from the provided array of elements.voidreplaceAll(E oldValue, E newValue) Replaces all instances of the old value to the new value.voidreplaceFirst(E oldValue, E newValue) Replaces only the first instance of the old value to the new value.voidreplaceLast(E oldValue, E newValue) Replaces only the last instance of the old value to the new value.resize(int size) Returns a resized array whose elements are mapped from that of this array's elements.voidSets theith element of this array.voidSets a sub-array of this array to the values of the provided sub-arraya.voidshuffle()Shuffles this array, randomizing its elements' order.voidsort()Sorts this array by its natural ascending order.voidsort(Comparator<? super E> c) Sorts this array using the provided comparator functionc.stream()Returns a stream whose source is the elements of this array.subArray(int s, int e) Returns a sub-array of this array which represents a portion of this array between the range of[s, e).static <E> SafeArray<E>syncCopyOf(SafeArray<? extends E> a) Creates a new thread-safe copy of the provided arraya.static <E> SafeArray<E>syncOf(E... elements) Creates a new synchronized array from the provided array of elements.toString()Serializes this array into a string.tuple()Returns a tuple containing the elements of this array in their proper order.voidupdate(int i, UnaryOperator<E> f) Updates theith element of this array with the provided update functionf.voidupdate(BiFunction<? super Integer, ? super E, E> f) Applies the provided update functionfto each element of this array, then assigns the return value of the function to the corresponding index of this array.voidupdate(UnaryOperator<E> f) Applies the provided update functionfto each element of this array, then assigns the return value of the function to the corresponding index of this array.Methods inherited from interface java.lang.Iterable
spliterator
-
Method Details
-
of
Creates a new type-safe array from the provided array of elements.- Type Parameters:
E- The type of element to contain in the array- Parameters:
elements- The elements to contain in the array- Returns:
- A new type-safe array containing the provided elements
-
syncOf
Creates a new synchronized array from the provided array of elements.- Type Parameters:
E- The type of element to contain in the array- Parameters:
elements- The elements to contain in the array- Returns:
- A new thread-safe array containing the provided elements
-
atomicOf
Creates a new atomic array from the provided array of elements.- Type Parameters:
E- The type of element to contain in the array- Parameters:
elements- The elements to contain in the array- Returns:
- A new thread-safe array containing the provided elements
-
referenceOf
Creates a new type-safe reference array from the provided array of elements. Changes in the type-safe array will be reflected to the original array, as well as from the original array to the type-safe array.- Type Parameters:
E- The type of element to reference- Parameters:
elements- The elements the array should reference- Returns:
- A new type-safe reference array referencing the provided elements
-
copyOf
Creates a new thread-unsafe copy of the provided arraya.- Type Parameters:
E- The type of element to copy- Parameters:
a- The array of which to copy value from- Returns:
- A new thread-unsafe copy of the provided array
a
-
syncCopyOf
Creates a new thread-safe copy of the provided arraya.- Type Parameters:
E- The type of element to copy- Parameters:
a- The array of which to copy value from- Returns:
- A new thread-safe copy of the provided array
a
-
atomicCopyOf
Creates a new atomic copy of the provided arraya.- Type Parameters:
E- The type of element to copy- Parameters:
a- The array of which to copy value from- Returns:
- A new atomic copy of the provided array
a
-
referenceOf
Creates a new reference to the provided arraya. Changes will be reflected between the two arrays.- Type Parameters:
E- The type of element to reference- Parameters:
a- The array of which to reference values from- Returns:
- A new type-safe reference array referencing the provided array
a
-
from
Creates a new type-safe array from a stream of values.- Type Parameters:
E- The type of element to contain- Parameters:
s- The stream of which to use as the source of the array- Returns:
- A new type-safe array containing the stream's values
-
length
int length()Returns the length of this array. -
contains
Returns whether this array contains the provided objectobj.- Parameters:
obj- The object of which to check for containment- Returns:
trueif at least one element of this array is equal to the provided objectobj
-
containsAll
Returns whether this array contains multiple objects.- Parameters:
i- The iterable object of which to check for containment- Returns:
trueif this array contains every element of the iterable object
-
get
Returns theith element of this array.- Parameters:
i- The index of the element to get- Returns:
- The
ith element of this array - Throws:
IndexOutOfBoundsException- When the indexiis out of bounds
-
getOrDefault
Returns theith element of this array, but returns the provided fallback valueeinstead of the value at the specified index isnull.- Parameters:
i- The index of the element to gete- The fallback value to default to when the value isnull- Returns:
- The
ith element of this array if present, the fallback valueeotherwise - Throws:
IndexOutOfBoundsException- When the indexiis out of bounds
-
set
Sets theith element of this array.- Parameters:
i- The index of the element to sete- The element of which to set to- Throws:
IndexOutOfBoundsException- When the indexiis out of bounds
-
update
Updates theith element of this array with the provided update functionf.- Parameters:
i- The index of the element to updatef- The update function of which to apply to the element- Throws:
IndexOutOfBoundsException- When the indexiis out of bounds
-
fill
Fills this array with the provided valuev. Every element will be reassigned.- Parameters:
v- The value to fill this array with
-
fillEmpty
Fills every empty slot of this array with the provided valuev. All occurrences ofnullwill be replaced with the provided value.- Parameters:
v- The value to fill empty slots of this array with
-
fillRange
Fills every slot of this array between the range of[s, e)with the provided valuev.- Parameters:
s- The starting index at which to start assigning values frome- The ending index at which to stop assigning values atv- The value of which to assign to every slot within the specified range- Throws:
IndexOutOfBoundsException- When the indices are out of bounds
-
update
Applies the provided update functionfto each element of this array, then assigns the return value of the function to the corresponding index of this array.- Parameters:
f- The function of which to apply to each element of this array
-
update
Applies the provided update functionfto each element of this array, then assigns the return value of the function to the corresponding index of this array. The first parameter is the index of the value which was provided.- Parameters:
f- The function of which to apply to each element of this array
-
replaceAll
Replaces all instances of the old value to the new value.- Parameters:
oldValue- The old value to replacenewValue- The new value to replace to
-
replaceFirst
Replaces only the first instance of the old value to the new value. (starting from index0, and incrementing upwards)- Parameters:
oldValue- The old value to replacenewValue- The new value to replace to
-
replaceLast
Replaces only the last instance of the old value to the new value. (starting from the last index, and decrementing downwards)- Parameters:
oldValue- The old value to replacenewValue- The new value to replace to
-
subArray
Returns a sub-array of this array which represents a portion of this array between the range of[s, e). Changes in the sub-array will be reflected to this array. For example, callinga.subArray(1, 3).fill(null);will have the same effect as setting the values of indices1, 2of the original array tonull.- Parameters:
s- The starting index at which to start creating the sub-array (inclusive)e- The ending index at which to stop creating the sub-array (exclusive)- Returns:
- The sub-array representing the index range of
[s, e) - Throws:
IndexOutOfBoundsException- When the range is invalid, or is out of bounds
-
setRange
Sets a sub-array of this array to the values of the provided sub-arraya.- Parameters:
s- The starting index at which to start copying values from (inclusive)e- The ending index at which to stop copying values from (exclusive)a- The sub-array containing the values to assign to this array- Throws:
IndexOutOfBoundsException- When the range is invalid, or is out of bounds
-
resize
Returns a resized array whose elements are mapped from that of this array's elements. If the new array is larger than this array, the unmappable part will not be populated, leaving it uninitialized asnull.- Parameters:
size- The size to resize this array to- Returns:
- The resized array
-
shuffle
void shuffle()Shuffles this array, randomizing its elements' order. -
sort
Sorts this array by its natural ascending order. This operation will only succeed if the elementEis an instance ofComparable.- Specified by:
sortin interfaceBaseArray<E>- Throws:
UnsupportedOperationException- When at least one element cannot be cast toComparable
-
sort
Sorts this array using the provided comparator functionc. -
filter
Tests each element of this array using the provided predicatef, collects all elements the predicate returnstrueto, then returns a new array containing only the filtered elements.- Parameters:
f- The predicate to use to filter this array- Returns:
- The filtered array
-
map
Applies the provided mapper functionfto each element of this array, then returns a new array containing the return values of the functionf.- Type Parameters:
F- The type of element to map this array to- Parameters:
f- The function of which to apply to each element of this array- Returns:
- The resulting array
-
mapToDouble
Applies the provided mapper functionfto each element of this array, then returns a new double array containing the return values of the functionf.- Parameters:
f- The function of which to apply to each element of this array- Returns:
- The resulting array
- See Also:
-
mapToFloat
Applies the provided mapper functionfto each element of this array, then returns a new float array containing the return values of the functionf.- Parameters:
f- The function of which to apply to each element of this array- Returns:
- The resulting array
- See Also:
-
mapToLong
Applies the provided mapper functionfto each element of this array, then returns a new long array containing the return values of the functionf.- Parameters:
f- The function of which to apply to each element of this array- Returns:
- The resulting array
- See Also:
-
mapToInt
Applies the provided mapper functionfto each element of this array, then returns a new integer array containing the return values of the functionf.- Parameters:
f- The function of which to apply to each element of this array- Returns:
- The resulting array
- See Also:
-
merge
@Nonnull <F,G> SafeArray<G> merge(@Nonnull SafeArray<F> a, @Nonnull BiFunction<? super E, ? super F, throws IllegalArgumentException? extends G> f) Between this array and the provided arraya, this applies the merger functionfto each corresponding pair of elements, then returns a new array containing the return values of the merger functionf. In other words, this merges the two arrays into a new array using the provided merger functionf.- Type Parameters:
F- The type of element to merge this array withG- The type of element to merge the two arrays to- Parameters:
a- The array of which to merge this array withf- The merger function to handle the merging of the two arrays- Returns:
- The resulting array
- Throws:
IllegalArgumentException- When the provided arraya's length is different from that of this array's length
-
append
Append the provided arrayato the end of this array, then returns the resulting array.- Parameters:
a- The array of which to append to the end of this array- Returns:
- The appended array
-
prepend
Prepends the provided arrayato the front of this array, then returns the resulting array.- Parameters:
a- The array of which to prepend to the front of this array- Returns:
- The prepended array
-
iterator
Returns an iterator over every element of this array. -
forEach
Executes the provided actionaonce for each element of this array. A reference to the element is provided as the first parameter of the action. -
forEach
Executes the provided actionaonce for each element of this array. The index of the element is provided as the first parameter of the action, and a reference to the element is provided as the second parameter of the action. -
array
Returns a primitive array containing the elements of this array in their proper order.- Returns:
- The primitive array representation of this array
-
stream
Returns a stream whose source is the elements of this array.- Returns:
- A stream whose source is the elements of this array
- See Also:
-
list
Returns an unmodifiable list containing the elements of this array in their proper order.- Specified by:
listin interfaceBaseArray<E>- Returns:
- The list representation of this array
- Throws:
NullPointerException- When this array contains at least one instance ofnull- See Also:
-
tuple
Returns a tuple containing the elements of this array in their proper order. Unlikelist(), this operation cannot fail as tuples inherently support the usage ofnullas their values.- Returns:
- The tuple representation of this array
- See Also:
-
equals
Checks for equality between this array and the provided objectobj. -
toString
Serializes this array into a string.
-