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 se multiplican la clave * el valor en un Map en Java?

Tengo esta clase:

class Producto {
    public double precio;

    public Producto(double precio) {
        this.precio = precio;
    }
}

Y un Mapa:

Map<producto, integer=""> productos = new HashMap<>();

Que contiene varios productos agregados de la siguiente manera:

productos.put(new Producto(2.99), 2);
productos.put(new Producto(1.99), 4);

Y quiero calcular la suma de todos los productos multiplicando los valores usando streams. Intenté lo siguiente:

double total = productos.entrySet().stream().mapToDouble((k, v) -> k.getKey().precio * v.getValue()).sum();

Pero no se compila, obtengo “Cannot resolve method ‘getValue()'”.

Espero:

(2.99 * 2) + (1.99 * 4) = 5.98 + 7.96 = 13.94</producto,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el error de compilación, puedes cambiar la expresión lambda utilizada en el método mapToDouble() para utilizar un Map.Entry, ya que representa un par clave-valor en el Map. También puedes utilizar el método getvalue() para obtener el valor de la entrada. Aquí tienes el código corregido:

    double total = products.entrySet().stream()
                    .mapToDouble(entry -> entry.getKey().price * entry.getValue())
                    .sum();
    

    Esto debería darte el resultado esperado de 13.94.

Comments are closed.