[BAEL-2235] | core-java | Common Array Operations in Java (#5599)
* * added all array operations and tests * fixed details, adn added some more methods to java array operations examples * * moved arrays operations package to core-java-collections submodule
This commit is contained in:
		
							parent
							
								
									c7b7d94409
								
							
						
					
					
						commit
						81a7e1966e
					
				| @ -61,7 +61,7 @@ | ||||
|     <properties> | ||||
|         <openjdk.jmh.version>1.19</openjdk.jmh.version> | ||||
|         <junit.platform.version>1.2.0</junit.platform.version> | ||||
|         <commons-lang3.version>3.5</commons-lang3.version> | ||||
|         <commons-lang3.version>3.8.1</commons-lang3.version> | ||||
|         <commons-collections4.version>4.1</commons-collections4.version> | ||||
|         <collections-generic.version>4.01</collections-generic.version> | ||||
|         <avaitility.version>1.7.0</avaitility.version> | ||||
|  | ||||
| @ -0,0 +1,197 @@ | ||||
| package com.baeldung.array.operations; | ||||
| 
 | ||||
| import java.lang.reflect.Array; | ||||
| import java.util.Arrays; | ||||
| import java.util.HashSet; | ||||
| import java.util.LinkedHashSet; | ||||
| import java.util.Random; | ||||
| import java.util.Set; | ||||
| import java.util.function.Function; | ||||
| import java.util.function.IntPredicate; | ||||
| import java.util.function.Predicate; | ||||
| 
 | ||||
| import org.apache.commons.lang3.ArrayUtils; | ||||
| 
 | ||||
| public class ArrayOperations { | ||||
| 
 | ||||
|     // Get the first and last item of an array | ||||
|     public static <T> T getFirstObject(T[] array) { | ||||
|         return array[0]; | ||||
|     } | ||||
| 
 | ||||
|     public static int getFirstInt(int[] array) { | ||||
|         return array[0]; | ||||
|     } | ||||
| 
 | ||||
|     public static <T> T getLastObject(T[] array) { | ||||
|         return array[array.length - 1]; | ||||
|     } | ||||
| 
 | ||||
|     public static int getLastInt(int[] array) { | ||||
|         return array[array.length - 1]; | ||||
|     } | ||||
| 
 | ||||
|     // Append a new item to an array | ||||
|     public static <T> T[] appendObject(T[] array, T newItem) { | ||||
|         return ArrayUtils.add(array, newItem); | ||||
|     } | ||||
| 
 | ||||
|     public static int[] appendInt(int[] array, int newItem) { | ||||
|         int[] newArray = Arrays.copyOf(array, array.length + 1); | ||||
|         newArray[newArray.length - 1] = newItem; | ||||
|         return newArray; | ||||
|     } | ||||
| 
 | ||||
|     public static int[] appendIntWithUtils(int[] array, int newItem) { | ||||
|         return ArrayUtils.add(array, newItem); | ||||
|     } | ||||
| 
 | ||||
|     // Compare two arrays to check if they have the same elements | ||||
|     public static <T> boolean compareObjectArrays(T[] array1, T[] array2) { | ||||
|         return Arrays.equals(array1, array2); | ||||
|     } | ||||
| 
 | ||||
|     public static boolean compareIntArrays(int[] array1, int[] array2) { | ||||
|         return Arrays.equals(array1, array2); | ||||
|     } | ||||
| 
 | ||||
|     // Deep Compare (for nested arrays) | ||||
|     public static <T> boolean deepCompareObjectArrayUsingArrays(T[][] array1, T[][] array2) { | ||||
|         // We can use Objects.deepEquals for a broader approach | ||||
|         return Arrays.deepEquals(array1, array2); | ||||
|     } | ||||
| 
 | ||||
|     public static boolean deepCompareIntArrayUsingArrays(int[][] array1, int[][] array2) { | ||||
|         return Arrays.deepEquals(array1, array2); | ||||
|     } | ||||
| 
 | ||||
|     // Check if array is empty | ||||
|     public static <T> boolean isEmptyObjectArrayUsingUtils(T[] array1) { | ||||
|         return ArrayUtils.isEmpty(array1); | ||||
|     } | ||||
| 
 | ||||
|     public static boolean isEmptyIntArrayUsingUtils(int[] array1) { | ||||
|         return ArrayUtils.isEmpty(array1); | ||||
|     } | ||||
| 
 | ||||
|     // Remove duplicates | ||||
|     public static Integer[] removeDuplicateObjects(Integer[] array) { | ||||
|         // We can use other ways of converting the array to a set too | ||||
|         Set<Integer> set = new HashSet<>(Arrays.asList(array)); | ||||
|         return set.toArray(new Integer[set.size()]); | ||||
|     } | ||||
| 
 | ||||
|     public static int[] removeDuplicateInts(int[] array) { | ||||
|         // Box | ||||
|         Integer[] list = ArrayUtils.toObject(array); | ||||
|         // Remove duplicates | ||||
|         Set<Integer> set = new HashSet<Integer>(Arrays.asList(list)); | ||||
|         // Create array and unbox | ||||
|         return ArrayUtils.toPrimitive(set.toArray(new Integer[set.size()])); | ||||
|     } | ||||
| 
 | ||||
|     // Remove duplicates preserving the order | ||||
|     public static Integer[] removeDuplicateWithOrderObjectArray(Integer[] array) { | ||||
|         // We can use other ways of converting the array to a set too | ||||
|         Set<Integer> set = new LinkedHashSet<>(Arrays.asList(array)); | ||||
|         return set.toArray(new Integer[set.size()]); | ||||
|     } | ||||
| 
 | ||||
|     public static int[] removeDuplicateWithOrderIntArray(int[] array) { | ||||
|         // Box | ||||
|         Integer[] list = ArrayUtils.toObject(array); | ||||
|         // Remove duplicates | ||||
|         Set<Integer> set = new LinkedHashSet<Integer>(Arrays.asList(list)); | ||||
|         // Create array and unbox | ||||
|         return ArrayUtils.toPrimitive(set.toArray(new Integer[set.size()])); | ||||
|     } | ||||
| 
 | ||||
|     // Print an array | ||||
|     public static String printObjectArray(Integer[] array) { | ||||
|         return ArrayUtils.toString(array); | ||||
|     } | ||||
| 
 | ||||
|     public static String printObjectArray(Integer[][] array) { | ||||
|         return ArrayUtils.toString(array); | ||||
|     } | ||||
| 
 | ||||
|     public static String printIntArray(int[] array) { | ||||
|         return ArrayUtils.toString(array); | ||||
|     } | ||||
| 
 | ||||
|     public static String printIntArray(int[][] array) { | ||||
|         return ArrayUtils.toString(array); | ||||
|     } | ||||
| 
 | ||||
|     // Box or Unbox values | ||||
|     public static int[] unboxIntegerArray(Integer[] array) { | ||||
|         return ArrayUtils.toPrimitive(array); | ||||
|     } | ||||
| 
 | ||||
|     public static Integer[] boxIntArray(int[] array) { | ||||
|         return ArrayUtils.toObject(array); | ||||
|     } | ||||
| 
 | ||||
|     // Map array values | ||||
|     @SuppressWarnings("unchecked") | ||||
|     public static <T, U> U[] mapObjectArray(T[] array, Function<T, U> function, Class<U> targetClazz) { | ||||
|         U[] newArray = (U[]) Array.newInstance(targetClazz, array.length); | ||||
|         for (int i = 0; i < array.length; i++) { | ||||
|             newArray[i] = function.apply(array[i]); | ||||
|         } | ||||
|         return newArray; | ||||
|     } | ||||
| 
 | ||||
|     public static String[] mapIntArrayToString(int[] array) { | ||||
|         return Arrays.stream(array) | ||||
|             .mapToObj(value -> String.format("Value: %s", value)) | ||||
|             .toArray(String[]::new); | ||||
|     } | ||||
| 
 | ||||
|     // Filter array values | ||||
|     public static Integer[] filterObjectArray(Integer[] array, Predicate<Integer> predicate) { | ||||
|         return Arrays.stream(array) | ||||
|             .filter(predicate) | ||||
|             .toArray(Integer[]::new); | ||||
|     } | ||||
| 
 | ||||
|     public static int[] filterIntArray(int[] array, IntPredicate predicate) { | ||||
|         return Arrays.stream(array) | ||||
|             .filter(predicate) | ||||
|             .toArray(); | ||||
|     } | ||||
| 
 | ||||
|     // Insert item between others | ||||
|     public static int[] insertBetweenIntArray(int[] array, int... values) { | ||||
|         return ArrayUtils.insert(2, array, values); | ||||
|     } | ||||
| 
 | ||||
|     @SuppressWarnings("unchecked") | ||||
|     public static <T> T[] insertBetweenObjectArray(T[] array, T... values) { | ||||
|         return ArrayUtils.insert(2, array, values); | ||||
|     } | ||||
| 
 | ||||
|     // Shuffling arrays | ||||
|     public static int[] shuffleIntArray(int[] array) { | ||||
|         // we create a different array instance for testing purposes | ||||
|         int[] shuffled = Arrays.copyOf(array, array.length); | ||||
|         ArrayUtils.shuffle(shuffled); | ||||
|         return shuffled; | ||||
|     } | ||||
| 
 | ||||
|     public static <T> T[] shuffleObjectArray(T[] array) { | ||||
|         // we create a different array instance for testing purposes | ||||
|         T[] shuffled = Arrays.copyOf(array, array.length); | ||||
|         ArrayUtils.shuffle(shuffled); | ||||
|         return shuffled; | ||||
|     } | ||||
| 
 | ||||
|     // Get random number | ||||
|     public static int getRandomFromIntArray(int[] array) { | ||||
|         return array[new Random().nextInt(array.length)]; | ||||
|     } | ||||
| 
 | ||||
|     public static <T> T getRandomFromObjectArray(T[] array) { | ||||
|         return array[new Random().nextInt(array.length)]; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,365 @@ | ||||
| package com.baeldung.array.operations; | ||||
| 
 | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| 
 | ||||
| import java.util.Arrays; | ||||
| 
 | ||||
| import org.assertj.core.api.Condition; | ||||
| import org.junit.jupiter.api.BeforeEach; | ||||
| import org.junit.jupiter.api.Test; | ||||
| 
 | ||||
| public class ArrayOperationsUnitTest { | ||||
| 
 | ||||
|     private Integer[] defaultObjectArray; | ||||
|     private int[] defaultIntArray; | ||||
|     private Integer[][] defaultJaggedObjectArray; | ||||
|     private int[][] defaultJaggedIntArray; | ||||
| 
 | ||||
|     @BeforeEach | ||||
|     public void setupDefaults() { | ||||
|         defaultObjectArray = new Integer[] { 3, 5, 2, 5, 14, 4 }; | ||||
|         defaultIntArray = new int[] { 3, 5, 2, 5, 14, 4 }; | ||||
|         defaultJaggedObjectArray = new Integer[][] { { 1, 3 }, { 5 }, {} }; | ||||
|         defaultJaggedIntArray = new int[][] { { 1, 3 }, { 5 }, {} }; | ||||
|     } | ||||
| 
 | ||||
|     // Get the first and last item of an array | ||||
|     @Test | ||||
|     public void whenGetFirstObjectCalled_thenReturnFirstItemOfArray() { | ||||
|         Integer output = ArrayOperations.getFirstObject(defaultObjectArray); | ||||
| 
 | ||||
|         assertThat(output).isEqualTo(3); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenGetFirstIntCalled_thenReturnFirstItemOfArray() { | ||||
|         int output = ArrayOperations.getFirstInt(defaultIntArray); | ||||
| 
 | ||||
|         assertThat(output).isEqualTo(3); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenGetLastObjectCalled_thenReturnLastItemOfArray() { | ||||
|         Integer output = ArrayOperations.getLastObject(defaultObjectArray); | ||||
| 
 | ||||
|         assertThat(output).isEqualTo(4); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenGetLastIntCalled_thenReturnLastItemOfArray() { | ||||
|         int output = ArrayOperations.getLastInt(defaultIntArray); | ||||
| 
 | ||||
|         assertThat(output).isEqualTo(4); | ||||
|     } | ||||
| 
 | ||||
|     // Append a new item to an array | ||||
|     @Test | ||||
|     public void whenAppendObject_thenReturnArrayWithExtraItem() { | ||||
|         Integer[] output = ArrayOperations.appendObject(defaultObjectArray, 7); | ||||
| 
 | ||||
|         assertThat(output).endsWith(4, 7) | ||||
|             .hasSize(7); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenAppendInt_thenReturnArrayWithExtraItem() { | ||||
|         int[] output = ArrayOperations.appendInt(defaultIntArray, 7); | ||||
|         int[] outputUsingUtils = ArrayOperations.appendIntWithUtils(defaultIntArray, 7); | ||||
| 
 | ||||
|         assertThat(output).endsWith(4, 7) | ||||
|             .hasSize(7); | ||||
|         assertThat(outputUsingUtils).endsWith(4, 7) | ||||
|             .hasSize(7); | ||||
|     } | ||||
| 
 | ||||
|     // Compare two arrays to check if they have the same elements | ||||
|     @Test | ||||
|     public void whenCompareObjectArrays_thenReturnBoolean() { | ||||
|         Integer[] array2 = { 8, 7, 6 }; | ||||
|         Integer[] sameArray = { 3, 5, 2, 5, 14, 4 }; | ||||
|         boolean output = ArrayOperations.compareObjectArrays(defaultObjectArray, array2); | ||||
|         boolean output2 = ArrayOperations.compareObjectArrays(defaultObjectArray, sameArray); | ||||
| 
 | ||||
|         assertThat(output).isFalse(); | ||||
|         assertThat(output2).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenCompareIntArrays_thenReturnBoolean() { | ||||
|         int[] array2 = { 8, 7, 6 }; | ||||
|         int[] sameArray = { 3, 5, 2, 5, 14, 4 }; | ||||
|         boolean output = ArrayOperations.compareIntArrays(defaultIntArray, array2); | ||||
|         boolean output2 = ArrayOperations.compareIntArrays(defaultIntArray, sameArray); | ||||
| 
 | ||||
|         assertThat(output).isFalse(); | ||||
|         assertThat(output2).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     // Deep compare | ||||
|     @Test | ||||
|     public void whenDeepCompareObjectArrays_thenReturnBoolean() { | ||||
|         Integer[][] sameArray = { { 1, 3 }, { 5 }, {} }; | ||||
|         Integer[][] array2 = { { 1, 3 }, { 5 }, { 3 } }; | ||||
|         boolean output = ArrayOperations.deepCompareObjectArrayUsingArrays(defaultJaggedObjectArray, array2); | ||||
|         boolean output2 = ArrayOperations.deepCompareObjectArrayUsingArrays(defaultJaggedObjectArray, sameArray); | ||||
|         // Because arrays are Objects, we could wrongly use the non-deep approach | ||||
|         boolean outputUsingNonDeep = ArrayOperations.compareObjectArrays(defaultJaggedObjectArray, sameArray); | ||||
| 
 | ||||
|         assertThat(output).isFalse(); | ||||
|         assertThat(output2).isTrue(); | ||||
|         // This is not what we would expect! | ||||
|         assertThat(outputUsingNonDeep).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenDeepCompareIntArrays_thenReturnBoolean() { | ||||
|         int[][] sameArray = { { 1, 3 }, { 5 }, {} }; | ||||
|         int[][] array2 = { { 1, 3 }, { 5 }, { 3 } }; | ||||
|         boolean output = ArrayOperations.deepCompareIntArrayUsingArrays(defaultJaggedIntArray, array2); | ||||
|         boolean output2 = ArrayOperations.deepCompareIntArrayUsingArrays(defaultJaggedIntArray, sameArray); | ||||
| 
 | ||||
|         assertThat(output).isFalse(); | ||||
|         assertThat(output2).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     // Empty Check | ||||
|     @Test | ||||
|     public void whenIsEmptyObjectArray_thenReturnBoolean() { | ||||
|         Integer[] array2 = {}; | ||||
|         Integer[] array3 = null; | ||||
|         Integer[] array4 = { null, null, null }; | ||||
|         Integer[] array5 = { null }; | ||||
|         Integer[][] array6 = { {}, {}, {} }; | ||||
|         boolean output = ArrayOperations.isEmptyObjectArrayUsingUtils(defaultObjectArray); | ||||
|         boolean output2 = ArrayOperations.isEmptyObjectArrayUsingUtils(array2); | ||||
|         boolean output3 = ArrayOperations.isEmptyObjectArrayUsingUtils(array3); | ||||
|         boolean output4 = ArrayOperations.isEmptyObjectArrayUsingUtils(array4); | ||||
|         boolean output5 = ArrayOperations.isEmptyObjectArrayUsingUtils(array5); | ||||
|         boolean output6 = ArrayOperations.isEmptyObjectArrayUsingUtils(array6); | ||||
| 
 | ||||
|         assertThat(output).isFalse(); | ||||
|         assertThat(output2).isTrue(); | ||||
|         assertThat(output3).isTrue(); | ||||
|         // Mind these edge cases! | ||||
|         assertThat(output4).isFalse(); | ||||
|         assertThat(output5).isFalse(); | ||||
|         assertThat(output6).isFalse(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenIsEmptyIntArray_thenReturnBoolean() { | ||||
|         int[] array2 = {}; | ||||
|         boolean output = ArrayOperations.isEmptyIntArrayUsingUtils(defaultIntArray); | ||||
|         boolean output2 = ArrayOperations.isEmptyIntArrayUsingUtils(array2); | ||||
| 
 | ||||
|         assertThat(output).isFalse(); | ||||
|         assertThat(output2).isTrue(); | ||||
|     } | ||||
| 
 | ||||
|     // Remove Duplicates | ||||
|     @Test | ||||
|     public void whenRemoveDuplicateObjectArray_thenReturnArrayWithNoDuplicates() { | ||||
|         Integer[] output = ArrayOperations.removeDuplicateObjects(defaultObjectArray); | ||||
| 
 | ||||
|         assertThat(output).containsOnlyOnce(5) | ||||
|             .hasSize(5) | ||||
|             .doesNotHaveDuplicates(); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenRemoveDuplicateIntArray_thenReturnArrayWithNoDuplicates() { | ||||
|         int[] output = ArrayOperations.removeDuplicateInts(defaultIntArray); | ||||
| 
 | ||||
|         assertThat(output).containsOnlyOnce(5) | ||||
|             .hasSize(5) | ||||
|             .doesNotHaveDuplicates(); | ||||
|     } | ||||
| 
 | ||||
|     // Remove Duplicates Preserving order | ||||
|     @Test | ||||
|     public void whenRemoveDuplicatePreservingOrderObjectArray_thenReturnArrayWithNoDuplicates() { | ||||
|         Integer[] array2 = { 3, 5, 2, 14, 4 }; | ||||
|         Integer[] output = ArrayOperations.removeDuplicateWithOrderObjectArray(defaultObjectArray); | ||||
| 
 | ||||
|         assertThat(output).containsOnlyOnce(5) | ||||
|             .hasSize(5) | ||||
|             .containsExactly(array2); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenRemoveDuplicatePreservingOrderIntArray_thenReturnArrayWithNoDuplicates() { | ||||
|         int[] array2 = { 3, 5, 2, 14, 4 }; | ||||
|         int[] output = ArrayOperations.removeDuplicateWithOrderIntArray(defaultIntArray); | ||||
| 
 | ||||
|         assertThat(output).containsOnlyOnce(5) | ||||
|             .hasSize(5) | ||||
|             .containsExactly(array2); | ||||
|     } | ||||
| 
 | ||||
|     // Print | ||||
|     @Test | ||||
|     public void whenPrintObjectArray_thenReturnString() { | ||||
|         String output = ArrayOperations.printObjectArray(defaultObjectArray); | ||||
|         String jaggedOutput = ArrayOperations.printObjectArray(defaultJaggedObjectArray); | ||||
|         // Comparing to Arrays output: | ||||
|         String wrongArraysOutput = Arrays.toString(defaultJaggedObjectArray); | ||||
|         String differentFormatArraysOutput = Arrays.toString(defaultObjectArray); | ||||
|         // We should use Arrays.deepToString for jagged arrays | ||||
|         String differentFormatJaggedArraysOutput = Arrays.deepToString(defaultJaggedObjectArray); | ||||
| 
 | ||||
|         assertThat(output).isEqualTo("{3,5,2,5,14,4}"); | ||||
|         assertThat(jaggedOutput).isEqualTo("{{1,3},{5},{}}"); | ||||
|         assertThat(differentFormatArraysOutput).isEqualTo("[3, 5, 2, 5, 14, 4]"); | ||||
|         assertThat(wrongArraysOutput).contains("[[Ljava.lang.Integer;@"); | ||||
|         assertThat(differentFormatJaggedArraysOutput).contains("[[1, 3], [5], []]"); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenPrintIntArray_thenReturnString() { | ||||
|         String output = ArrayOperations.printIntArray(defaultIntArray); | ||||
|         String jaggedOutput = ArrayOperations.printIntArray(defaultJaggedIntArray); | ||||
|         // Comparing to Arrays output: | ||||
|         String wrongArraysOutput = Arrays.toString(defaultJaggedObjectArray); | ||||
|         String differentFormatArraysOutput = Arrays.toString(defaultObjectArray); | ||||
| 
 | ||||
|         assertThat(output).isEqualTo("{3,5,2,5,14,4}"); | ||||
|         assertThat(jaggedOutput).isEqualTo("{{1,3},{5},{}}"); | ||||
|         assertThat(differentFormatArraysOutput).isEqualTo("[3, 5, 2, 5, 14, 4]"); | ||||
|         assertThat(wrongArraysOutput).contains("[[Ljava.lang.Integer;@"); | ||||
|     } | ||||
| 
 | ||||
|     // Box and unbox | ||||
|     @Test | ||||
|     public void whenUnboxObjectArray_thenReturnPrimitiveArray() { | ||||
|         int[] output = ArrayOperations.unboxIntegerArray(defaultObjectArray); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(defaultIntArray); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void henBoxPrimitiveArray_thenReturnObjectArray() { | ||||
|         Integer[] output = ArrayOperations.boxIntArray(defaultIntArray); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(defaultObjectArray); | ||||
|     } | ||||
| 
 | ||||
|     // Map values | ||||
|     @Test | ||||
|     public void whenMapMultiplyingObjectArray_thenReturnMultipliedArray() { | ||||
|         Integer[] multipliedExpectedArray = new Integer[] { 6, 10, 4, 10, 28, 8 }; | ||||
|         Integer[] output = ArrayOperations.mapObjectArray(defaultObjectArray, value -> value * 2, Integer.class); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(multipliedExpectedArray); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenMapDividingObjectArray_thenReturnDividedArray() { | ||||
|         Double[] multipliedExpectedArray = new Double[] { 1.5, 2.5, 1.0, 2.5, 7.0, 2.0 }; | ||||
|         Double[] output = ArrayOperations.mapObjectArray(defaultObjectArray, value -> value / 2.0, Double.class); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(multipliedExpectedArray); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenMapIntArrayToString_thenReturnArray() { | ||||
|         String[] expectedArray = new String[] { "Value: 3", "Value: 5", "Value: 2", "Value: 5", "Value: 14", | ||||
|                 "Value: 4" }; | ||||
|         String[] output = ArrayOperations.mapIntArrayToString(defaultIntArray); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(expectedArray); | ||||
|     } | ||||
| 
 | ||||
|     // Filter values | ||||
|     @Test | ||||
|     public void whenFilterObjectArray_thenReturnFilteredArray() { | ||||
|         Integer[] multipliedExpectedArray = new Integer[] { 2, 14, 4 }; | ||||
|         Integer[] output = ArrayOperations.filterObjectArray(defaultObjectArray, value -> value % 2 == 0); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(multipliedExpectedArray); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenFilterIntArray_thenReturnFilteredArray() { | ||||
|         int[] expectedArray = new int[] { 2, 14, 4 }; | ||||
|         int[] output = ArrayOperations.filterIntArray(defaultIntArray, value -> (int) value % 2 == 0); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(expectedArray); | ||||
|     } | ||||
| 
 | ||||
|     // Insert between | ||||
|     @Test | ||||
|     public void whenInsertBetweenIntArrayToString_thenReturnNewArray() { | ||||
|         int[] expectedArray = { 3, 5, 77, 88, 2, 5, 14, 4 }; | ||||
|         int[] output = ArrayOperations.insertBetweenIntArray(defaultIntArray, 77, 88); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(expectedArray); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenInsertBetweenObjectArrayToString_thenReturnNewArray() { | ||||
|         Integer[] expectedArray = { 3, 5, 77, 99, 2, 5, 14, 4 }; | ||||
|         Integer[] output = ArrayOperations.insertBetweenObjectArray(defaultObjectArray, 77, 99); | ||||
| 
 | ||||
|         assertThat(output).containsExactly(expectedArray); | ||||
|     } | ||||
| 
 | ||||
|     // Shuffle between | ||||
|     @Test | ||||
|     public void whenShufflingIntArraySeveralTimes_thenAtLeastOneWithDifferentOrder() { | ||||
|         int[] output = ArrayOperations.shuffleIntArray(defaultIntArray); | ||||
|         int[] output2 = ArrayOperations.shuffleIntArray(defaultIntArray); | ||||
|         int[] output3 = ArrayOperations.shuffleIntArray(defaultIntArray); | ||||
|         int[] output4 = ArrayOperations.shuffleIntArray(defaultIntArray); | ||||
|         int[] output5 = ArrayOperations.shuffleIntArray(defaultIntArray); | ||||
|         int[] output6 = ArrayOperations.shuffleIntArray(defaultIntArray); | ||||
| 
 | ||||
|         Condition<int[]> atLeastOneArraysIsNotEqual = new Condition<int[]>( | ||||
|             "at least one output should be different (order-wise)") { | ||||
|             @Override | ||||
|             public boolean matches(int[] value) { | ||||
|                 return !Arrays.equals(value, output) || !Arrays.equals(value, output2) || !Arrays.equals(value, output3) | ||||
|                     || !Arrays.equals(value, output4) || !Arrays.equals(value, output5) | ||||
|                     || !Arrays.equals(value, output6); | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         assertThat(defaultIntArray).has(atLeastOneArraysIsNotEqual); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenShufflingObjectArraySeveralTimes_thenAtLeastOneWithDifferentOrder() { | ||||
|         Integer[] output = ArrayOperations.shuffleObjectArray(defaultObjectArray); | ||||
|         Integer[] output2 = ArrayOperations.shuffleObjectArray(defaultObjectArray); | ||||
|         Integer[] output3 = ArrayOperations.shuffleObjectArray(defaultObjectArray); | ||||
|         Integer[] output4 = ArrayOperations.shuffleObjectArray(defaultObjectArray); | ||||
|         Integer[] output5 = ArrayOperations.shuffleObjectArray(defaultObjectArray); | ||||
|         Integer[] output6 = ArrayOperations.shuffleObjectArray(defaultObjectArray); | ||||
| 
 | ||||
|         Condition<Integer[]> atLeastOneArraysIsNotEqual = new Condition<Integer[]>( | ||||
|             "at least one output should be different (order-wise)") { | ||||
|             @Override | ||||
|             public boolean matches(Integer[] value) { | ||||
|                 return !Arrays.equals(value, output) || !Arrays.equals(value, output2) || !Arrays.equals(value, output3) | ||||
|                     || !Arrays.equals(value, output4) || !Arrays.equals(value, output5) | ||||
|                     || !Arrays.equals(value, output6); | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         assertThat(defaultObjectArray).has(atLeastOneArraysIsNotEqual); | ||||
|     } | ||||
| 
 | ||||
|     // Get random item | ||||
|     @Test | ||||
|     public void whenGetRandomFromIntArrayToString_thenReturnItemContainedInArray() { | ||||
|         int output = ArrayOperations.getRandomFromIntArray(defaultIntArray); | ||||
| 
 | ||||
|         assertThat(defaultIntArray).contains(output); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void whenGetRandomFromObjectArrayToString_thenReturnItemContainedInArray() { | ||||
|         Integer output = ArrayOperations.getRandomFromObjectArray(defaultObjectArray); | ||||
| 
 | ||||
|         assertThat(defaultObjectArray).contains(output); | ||||
|     } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user