¿Cómo puedo transformar mi código usando Java API 8 corriente?

mangos:

Estoy escribiendo un método simple para imprimir las estadísticas de una serie de resultados de los juegos. Cada juego tiene una lista de resultados en el mismo, los cuales contienen enumeraciones de acuerdo con el resultado de un juego. Mi instructor ha comentado un TODO en mi código:

public static void printStatistics(List<Game> games) {
    float win = 0;
    float lose = 0;
    float draw = 0;
    float all = 0;

    //TODO: should be implemented /w stream API
    for (Game g : games) {
        for (Outcome o : g.getOutcomes()) {
            if (o.equals(Outcome.WIN)) {
                win++;
                all++;
            } else if (o.equals(Outcome.LOSE)) {
                lose++;
                all++;
            } else {
                draw++;
                all++;
            }
        }
    }
    DecimalFormat statFormat = new DecimalFormat("##.##");

    System.out.println("Statistics: The team won: " + statFormat.format(win * 100 / all) + " %, lost " + statFormat.format(lose * 100 / all)
            + " %, draw: " + statFormat.format(draw * 100 / all) + " %");

}

Estoy familiarizado con las expresiones lambda. He intentado buscar en línea para las soluciones, pero no pude encontrar ejemplos de una corriente acceder a los campos de un campo de una clase. Yo sería feliz si usted me podría dar una solución, o proveer de mí un tutorial correspondiente. Gracias.

Ruslan:

groupingBy encaja este caso:

Map<Outcome, Long> map = games.stream()
        .flatMap(game -> game.getOutcomes().stream())
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

Y obtener win, losecontar:

long win = map.get(Outcomes.WIN);
long lose = map.get(Outcomes.LOSE);
...

Para conseguir allcontar necesita sumar todos los valores del mapa

long all = map.values().stream()
    .mapToLong(Long::valueOf)
    .sum();

Supongo que te gusta

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