es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo aplicar un doble filtro en los streams de Java?

Tengo una clase Empleado que tiene salario y departamento y una lista de empleados.

clase estática Empleado {
    private String departamento;
    private int salario;

//obtenedores
getDepartamento()
getSalario()


}

Lista <empleado>

Necesito encontrar el número de departamentos con un mínimo de 30 empleados que ganen un mínimo de 100 de salario.

Hasta ahora tengo esto que me da el número de empleados por departamento. Pero no estoy seguro de cómo aplicar los filtros.

HashMap<string, long=""> collect = empleados
            .stream()
            .collect(Collectors.groupingBy(Employee::getDepartment, HashMap::new, Collectors.counting()));

Cualquier ayuda sería apreciada.</string,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar el método filter para aplicar los filtros. Puedes usar el método filter para filtrar a los empleados con un salario menor a 100 y luego usar el método collect para agrupar a los empleados por departamento y contar el número de empleados en cada departamento. Finalmente, puedes usar el método filter otra vez para filtrar los departamentos con menos de 30 empleados.

    HashMap<String, Long> collect = employees
                .stream()
                .filter(e -> e.getSalary() >= 100)
                .collect(Collectors.groupingBy(Employee::getDepartment, HashMap::new, Collectors.counting()))
                .entrySet()
                .stream()
                .filter(e -> e.getValue() >= 30)
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
    

Comments are closed.