Java 8 eliminación de un elemento de lista de arreglo / matriz basado en expresiones regulares

Scidngll:

¿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);
    }
}
Holger:

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 Patterncreada por compilees 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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=171754&siteId=1
Recomendado
Clasificación