Java 8 de vapor Grupo A en dos propiedades y obtener la media de la tercera propiedad

kit:

Tengo más adelante objetos de clase en un ArrayList:

new Pojo("Football","M",1000)
new Pojo("Football","M",1000)
new Pojo("Cricket","F",500)
new Pojo("Cricket","F",1500)
new Pojo("Cricket","M",500)
new Pojo("Cricket","M",500)

Quiero llegar a los puntos medios de los "Deportes" con respecto al "género". Me encontré con Java 8 arroyos y parece que es bueno para usarlo aquí, pero no sé para ponerlo en práctica.

Lo he probado, como a continuación:

Map<Object,Long> mp = pojoList.stream().collect(Collectors.groupingBy(p -> p.sport,Collectors.counting()));

Es bueno trabajar, y me da un deporte contar pero quiero aplicar uno más filtros de género y conseguir el punto medio.

La salida que quiero:

new PojoOutput("Football","M",1000)
new PojoOutput("Cricket","F",1000)
new PojoOutput("Cricket","M",500)
ernest_k:

Se pueden agrupar en un mapa utilizando 2 groupingByllamadas, uno de ellos es el de aguas abajo a la otra:

Map<String, Map<String, Double>> res = pojos.stream()
    .collect(Collectors.groupingBy(Pojo::getSport,
            Collectors.groupingBy(Pojo::getGender, 
                                  Collectors.averagingDouble(i -> i.getPoints()))));

Esto resulta en {Cricket={F=1000.0, M=500.0}, Football={M=1000.0}}que se puede convertir fácilmente a Pojoinstancias utilizando algo como esto:

List<Pojo> groups = result.entrySet()
        .stream()
        .flatMap(sport -> sport.getValue()
                        .entrySet().stream()
                        .map(gender -> new Pojo(sport.getKey(), 
                                                gender.getKey(), 
                                                gender.getValue())))
        .collect(Collectors.toList());

Resultado con un generada toString:

[Pojo [sport=Cricket, gender=F, points=1000.0], 
 Pojo [sport=Cricket, gender=M, points=500.0], 
 Pojo [sport=Football, gender=M, points=1000.0]]

Supongo que te gusta

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