¿Hay una mejor manera de lograr lo siguiente en Java 8?
String regex = "^SACHI";
for (String temp : personalNames ) {
if (temp.matches(regex)){
personalNames.remove(temp);
}
}
Puedes usar
personalNames.removeIf(Pattern.compile("^SACHI").asPredicate());
También puede utilizar la más simple
personalNames.removeIf(s -> s.matches("^SACHI"));
pero se llevará a cabo Pattern.compile("^SACHI")
bajo el capó, para cada elemento en el peor de los casos. Tenga en cuenta que la Pattern
creada por compile
es inmutable y puede ser compartida, por lo tanto, también se puede crear sólo una vez, al igual
static final Pattern REMOVAL_PATTERN = Pattern.compile("^SACHI");
y utilizarlo como
personalNames.removeIf(REMOVAL_PATTERN.asPredicate());
asPredicate()
utiliza find()
en lugar de matches()
, pero dado que su patrón tiene el ^
ancla, que no hace ninguna diferencia. El método asMatchPredicate()
para obtener un predicado el uso matches()
se ha añadido en el JDK 11.
Si todo lo que quiere, es para que coincida con una cadena literal al principio, también se puede utilizar
personalNames.removeIf(s -> s.startsWith("SACHI"));
que no tienen la sobrecarga de expresiones regulares de inicialización.