Flujos de Java - Recogida a un mapa con GroupingBy y medir, pero con 0 Cuenta Si un específico campo es nulo

Melih:

Para proteger a la pregunta de "cazadores de duplicados", tengo que mencionar que yo no creo que la solución Busco está filtrando. Hice mi búsqueda, nunca se encontrará con una respuesta mencionar el filtrado.

Tengo una lista de objetos con una clase de esa manera:

class Person {
  String gender;
  String income;
  String petName;
}

Quiero recoger esta lista en un mapa, groupingBy de género, y contando los animales que tienen, y por supuesto necesidad de pasar a 0 si Petname es nulo.

Map<String, Long> mapping = people
  .stream()
  .collect(Collectors.groupingBy(Person::gender, Collectors.counting());

Sin implementar la interfaz del colector que pone el 5 métodos (Porque yo ya estoy tratando de deshacerse de otro colector personalizado) ¿Cómo puedo hacer que esto no cuenta el objeto si de petNamecampo es null.

Puedo beneficiarse de Java-11

Ravindra Ranwala:

En primer lugar, el grupo de todas las personas por su sexo, y luego usar el colector de filtrado para filtrar las personas con nombres nulos. Por último, utilice el colector aguas abajo de recuento para contar el número de elementos pertenecen a cada categoría. Así es como se ve.

Map<String, Long> peopleCntByGender = people.stream()
    .collect(Collectors.groupingBy(Person::getGender, 
        Collectors.filtering(p -> p.getPetName() != null, 
            Collectors.counting())));

Sin embargo, el colector de filtrado sólo está disponible en Java9, por lo tanto, si está utilizando Java8 y no puede migrar a Java9 tan fácilmente, que no escribe su propia aduana filteringcolector y utilizar aquí. Esta respuesta o JDK 9 Código fuente pueden ayudar.

Supongo que te gusta

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