
Con la versión 8 de Java, se ha introducido un nuevo método, disponible para los tipos Collection. Este método es removeif(), el cual acepta como parámetro un Predicado (Predicate) que define la condición en la que deben eliminarse los elementos de la colección.
Como resultado, devuelve un booleano que devuelve TRUE en caso de que se haya eliminado el elemento, o FALSE en caso contrario.
Supongamos que tenemos una colección de tipo pila (Stack) de cadenas (String) y que queremos eliminar aquellas cadenas que cumplen cierta condición:
1 2 3 4 5 6 7 8 | Collection<String> misPalabras = new Stack<>(); misPalabras.add( "Prueba" ); misPalabras.add( "de" ); misPalabras.add( "uso" ); misPalabras.add( "nuevo" ); misPalabras.add( "metodo" ); misPalabras.removeIf ( s -> s.contains("ue") ); |
Este código creará una colección de tipo pila de cadenas y eliminará aquellos elementos cuyas cadenas contengan la subcadena ‘ue‘. En este caso, eliminará los elementos ‘Prueba‘ y ‘nuevo‘.
Es importante remarcar que no todas las colecciones soportan la eliminación de elementos. En caso de no soportarla, se arrojará una excepción del tipo UnsupportedOperationException al intentar la eliminación del elemento en cuestión. Una de estas colecciones es, por ejemplo, ArrayList:
1 2 | Collection<String> misPalabras = Arrays.asList( "Prueba", "de", "uso", "nuevo", "metodo" ); misPalabras.removeIf( s -> s.contains("ue") ); |
En esta ocasión, se lanzará una excepción debido a que el método Arrays.asList() devuelve un ArrayList de tipo java.utils.Arrays.ArrayList, el cual es de solo lectura y de tamaño fijo, distinto al que normalmente se usa de tipo java.util.ArrayList, el cual sí es modificable.
