Java - Usar Stream.parallel()

 
Vista:
sin imagen de perfil
Val: 25
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Usar Stream.parallel()

Publicado por Nico (14 intervenciones) el 22/10/2019 13:29:32
Hola necesito crear un método que recibe una lista de objetos de tipo alumnos y que usando Stream.parallel() me muestre el nombre de alumno que más se repite
Map<String, Long> nombres ;

1
2
3
4
5
6
7
8
public String nombreMasComunAlumnosNoMatriculados( final Alumno[] vectorAlunos ) {
 
    nombres = Arrays.stream(vectorAlunos).parallel().
    filter(name -> !name.testMatriculado()).
    collect(Collectors.groupingBy(Alumno::getNombre, Collectors.counting()));
 
    return nombres.toString();
}
Ahora mismo devuelvo el nombre de los alumnos y el número de veces que se repite, pero no consigo mostrar solo el nombre más repetido.
Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Usar Stream.parallel()

Publicado por Rodrigo (623 intervenciones) el 22/10/2019 15:07:57
GroupingBy te va a generar un map, a ese map aplicale ..

entrySet()
.stream()
.max(Comparator.comparing(Entry::getValue))
.ifPresent(System.out::println)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 25
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Usar Stream.parallel()

Publicado por Nico (14 intervenciones) el 23/10/2019 11:41:30
Gracias Rodrigo, al final lo resolví así tras revisar tu ejemplo para que me devolviese un string.

Map<String, Long> nombres ;
String nom;
Entry<String, Long> nombre;

//igualo para conseguir un solo el valor máximo con la clave correspondiente
nombre = nombres.entrySet().stream().
max(Comparator.comparing(Entry::getValue)).get();
return nom = nombre.getKey();

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Usar Stream.parallel()

Publicado por Billy Joel (876 intervenciones) el 22/10/2019 19:25:31
Yo lo resuelvo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public String getNombreMasRepetido(Alumno[] alumnos) {
    Map<String, Long> nombres = new HashMap();
    Arrays.stream(alumnos).parallel().forEach(alumno -> {
        if (alumno.testMatriculado()) {
            nombres.put(alumno.getNombre(), nombres.containsKey(alumno.getNombre()) ? nombres.get(alumno.getNombre()) + 1 : 1);
        }
    });
    Map.Entry<String, Long> max = null;
    for (Map.Entry<String, Long> entry : nombres.entrySet()) {
        if (max == null || entry.getValue().compareTo(max.getValue()) > 0) {
            max = entry;
        }
    }
    if (max != null) {
        return "El nombre mas repetido es " + max.getKey() + " que se repitio " + max.getValue() + " veces";
    } else {
        return "No se encontraron nombres";
    }
}

Saludos,
Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 25
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Usar Stream.parallel()

Publicado por Nico (14 intervenciones) el 23/10/2019 11:37:46
Gracias Billy Joel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar