Java 8 Lambdas - Cómo sumar y promediar desde una secuencia

¿Es posible sumar y promediar y transformar a un nuevo objeto desde una secuencia? Tengo un objeto

    public class Foo {
       private String code;
       private double price;
      ....
    }

Ahora quiero obtener el promedio y sumar esta lista de objetos (sumar precio por código y precio promedio por código también)

 foos = Arrays.asList(
            new Foo("MTN" , 200 ),
            new Foo("MTN" , 210 ),
            new Foo("MTN" , 205 ),
            new Foo("OMT" , 300 ),
            new Foo("OMT" , 320 ),
            new Foo("OMT" , 310 ),
            new Foo("AAA" , 650 ),
            new Foo("AAA" , 680 ),
            new Foo("AAA" , 600 ));

Entonces me gustaría crear un nuevo objeto (FooB

    public class FooB {
       private String code;
       private double total;
       private double average;
       ....
   }

Esto es lo que tengo ahora, funciona, pero voy a través de la transmisión dos veces. Quiero un método donde pueda hacer esto yendo a través de la secuencia una vez.

 Map<String, Double> averagePrices = foos.stream()
            .collect(
                    Collectors.groupingBy(
                   Foo::getCode,Collectors.averagingDouble(Foo::getPrice)));



    Map<String, Double> totalPrices = foos.stream()
            .collect(
                    Collectors.groupingBy(
                            Foo::getCode,
                            Collectors.summingDouble(Foo::getPrice)));


    List<FooB > fooBs = new ArrayList<>();
    averagePrices.forEach((code, averageprice)-> {
        FooB fooB = new FooB (code , totalPrices.get(code)  , averageprice);
        fooBs.add(fooB );
    });

    fooBs.forEach(e -> System.out.println(e.toString()));

¿Hay una mejor manera de hacer esto sin repetir esto? Gracias

Respuesta 1

Estoy experimentando un problema inherente cuando uso eclipse para Java EE en ubuntu 16.04. El programa se bloquea al abrir un nuevo proyecto y no muestra cuadros de diálogo ni muestra el contenido de ...

Estoy ejecutando Android Studio en una Mac OS X Maverick. He instalado el JDK de 64 bits. Cuando ejecuto el emulador, aparece el mensaje Error: Terminación anormal del proceso de compilación: Error: Esta instancia de Java ...

Necesito mejorar las interfaces JMX de una aplicación Java distribuida. La razón para elegir JMX es la simplicidad de exponer datos. Estas aplicaciones distribuidas existen en varias máquinas diferentes ...

Cuando estoy creando una constante en IntelliJ (usando Ctrl + Alt + C), por defecto es public static final. ¿Cómo puedo hacerlo privado estático final en su lugar?