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.

Java 8 Stream – Encuentra la cantidad más grande para Map>.

¿Cómo es posible encontrar el valor máximo de ventas dentro de un Map<String, List>?

class Account {
    String hashId;
    String address;
    BigDecimal sold;
}

Vi esta discusión pero no puedo modificarla para mi caso, tengo que buscar a través de todas las listas para obtener el mayor valor de ventas.

https://stackoverflow.com/questions/51408550/java-8-stream-find-max-count-values-for-mapstring-listobject

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el valor máximo vendido dentro de un Map<string,></string,><account>>, puedes utilizar streams de Java 8 y el método flatMap para iterar sobre todos los objetos List<account> en el mapa, luego utilizar el método max para encontrar el valor máximo de sold entre todos los objetos Account.

    Aquí tienes un ejemplo de código que demuestra cómo hacer esto:

    Map<string,></string,><account>> accountMap = ...
    
    Optional<bigdecimal> maxSold = accountMap.values().stream()
            .flatMap(List::stream) // aplanar las listas en un stream de cuentas
            .map(Account::getSold) // extraer los valores de sold
            .max(BigDecimal::compareTo); // encontrar el valor máximo vendido
    
    if (maxSold.isPresent()) {
        System.out.println("El valor máximo vendido es: " + maxSold.get());
    } else {
        System.out.println("El mapa de cuentas está vacío");
    }
    

    En este ejemplo, el método flatMap toma los objetos List<account> de la vista "values" del mapa accountMap y devuelve un stream aplanado de todos los objetos Account en el mapa. Esto se hace llamando al método stream en cada objeto List<account> y luego utilizando el método flatMap para fusionar todos estos streams en un solo stream.

    El método map extrae el valor sold de cada objeto Account en el stream, y finalmente, se utiliza el método max para encontrar el valor máximo de sold entre todos los objetos Account en el stream. El método compareTo se utiliza como comparador para comparar los valores BigDecimal.

    Ten en cuenta que el resultado de llamar a max en un stream vacío es un Optional vacío, por lo que debes verificar si maxSold.isPresent() antes de acceder al valor máximo vendido.

Comments are closed.