diff --git a/primitiveCollections/src/main/java/org/lucares/collections/IntList.java b/primitiveCollections/src/main/java/org/lucares/collections/IntList.java index 209465c..7fa8374 100644 --- a/primitiveCollections/src/main/java/org/lucares/collections/IntList.java +++ b/primitiveCollections/src/main/java/org/lucares/collections/IntList.java @@ -261,6 +261,26 @@ public final class IntList implements Serializable, Cloneable { index = insertPosition; } + /** + * Retains all elements contained in the specified list. + * + * @param retain + * the elements to retain + */ + public void retainAll(final IntList retain) { + final int size = index; + int insertPosition = 0; + for (int i = 0; i < size; i++) { + final int current = data[i]; + if (retain.indexOf(current) >= 0) { + // keep current element + data[insertPosition] = current; + insertPosition++; + } + } + index = insertPosition; + } + /** * Replaces all values in the list by applying {@code operator}. * diff --git a/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java b/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java index f45dcda..16e587c 100644 --- a/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java +++ b/primitiveCollections/src/test/java/org/lucares/collections/IntListTest.java @@ -626,7 +626,7 @@ public class IntListTest { } @Test - public void replaceAllOnEmptyList() { + public void testReplaceAllOnEmptyList() { final IntList list = new IntList(); list.replaceAll(i -> i * 3); @@ -634,7 +634,7 @@ public class IntListTest { } @Test - public void removeAll() { + public void testRemoveAll() { final IntList list = IntList.of(-2, -1, 0, 1, 2, 3, 4, 5, 6); final IntList remove = IntList.of(-1, 2, 4, 5); @@ -644,7 +644,7 @@ public class IntListTest { } @Test - public void removeEmptyList() { + public void testRemoveEmptyList() { final IntList list = IntList.of(1, 2, 3, 4, 5, 6); final IntList remove = new IntList(); @@ -654,7 +654,7 @@ public class IntListTest { } @Test - public void removeAllFromEmptyList() { + public void testRemoveAllFromEmptyList() { final IntList list = new IntList(); final IntList remove = IntList.of(1); @@ -662,4 +662,34 @@ public class IntListTest { Assert.assertArrayEquals(new int[] {}, list.toArray()); Assert.assertEquals(0, list.size()); } + + @Test + public void testRetainAll() { + final IntList list = IntList.of(-2, -1, 0, 1, 2, 3, 4, 5, 6); + final IntList retain = IntList.of(-1, 2, 4, 5, 99); + + list.retainAll(retain); + Assert.assertArrayEquals(new int[] { -1, 2, 4, 5 }, list.toArray()); + Assert.assertArrayEquals(new int[] { -1, 2, 4, 5, 99 }, retain.toArray()); + } + + @Test + public void testRetainAllOnEmptyList() { + final IntList list = IntList.of(); + final IntList retain = IntList.of(-1, 2, 4, 5, 99); + + list.retainAll(retain); + Assert.assertArrayEquals(new int[] {}, list.toArray()); + Assert.assertArrayEquals(new int[] { -1, 2, 4, 5, 99 }, retain.toArray()); + } + + @Test + public void testRetainAllFromEmptyList() { + final IntList list = IntList.of(-2, -1, 0, 1, 2); + final IntList retain = IntList.of(); + + list.retainAll(retain); + Assert.assertArrayEquals(new int[] {}, list.toArray()); + Assert.assertArrayEquals(new int[] {}, retain.toArray()); + } }