pequeño peces peceras para limpiar limpia koi interno grandes filtros filtro estanques estanque cuanto como caseros cada acuario java arrays lambda java-8

java - peces - filtros para peceras



¿Cómo obtener el tamaño de un flujo después de aplicar un filtro por la expresión lambda? (2)

Considere el siguiente código:

List<Locale> locales = Arrays.asList( new Locale("en", "US"), new Locale("ar"), new Locale("en", "GB") ); locales.stream().filter(l -> l.getLanguage() == "en");

¿Cómo obtengo el tamaño de los locales ArrayList después de aplicar el filter , dado que locales.size() me da el tamaño antes de aplicar el filter ?


Cuando obtiene una transmisión de la lista, no la modifica. Si desea obtener el tamaño del flujo después del filtrado, llame a count() en él.

long sizeAfterFilter = locales.stream().filter(l -> l.getLanguage().equals("en")).count();

Si desea obtener una nueva lista, simplemente llame a .collect(toList()) en el flujo resultante. Si no le preocupa modificar la lista en su lugar, simplemente puede usar removeIf en la List .

locales.removeIf(l -> !l.getLanguage().equals("en"));

Tenga en cuenta que Arrays.asList devuelve una lista de tamaño fijo para que Arrays.asList una excepción, pero puede envolverla en una ArrayList o simplemente recopilar el contenido de la secuencia filtrada en una List (resp. ArrayList ) usando Collectors.toList() (resp. Collectors.toCollection(ArrayList::new) ).


Utilice el método count() :

long matches = locales.stream() .filter(l -> l.getLanguage() == "en") .count();

Tenga en cuenta que está comparando cadenas utilizando == . Prefiero usar .equals() . Mientras == funcionará cuando se comparan cadenas internadas, falla de lo contrario.

Para su información se puede codificar usando solo referencias de métodos:

long matches = locales.stream() .map(Locale::getLanguage) .filter("en"::equals) .count();