Saltar al contenido

Lista Java 8> a la lista> agrupar por key y contar por valor

La guía o código que encontrarás en este artículo es la solución más fácil y efectiva que hallamos a tu duda o dilema.

Solución:

Puedes crear una clase Company y luego las operaciones posteriores se vuelven mucho más simples.

class Company 
    String company;
    String billType;
    String billPeriod;

    public Company(String company, String billType, String billPeriod) 
        this.company = company;
        this.billType = billType;
        this.billPeriod = billPeriod;
    

    // getters, setters, toString, etc

Inicializar la lista:

List list = new ArrayList<>();
list.add(new Company("LG", "A", "09-2018"));
list.add(new Company("LG", "A", "09-2018"));
list.add(new Company("LG", "A", "09-2018"));
list.add(new Company("LG", "B", "01-2019"));
list.add(new Company("LG", "B", "01-2019"));
list.add(new Company("Samsung", "A", "10-2018"));
list.add(new Company("Samsung", "A", "10-2018"));
list.add(new Company("Samsung", "B", "11-2018"));

Ahora, por ejemplo, puede agrupar por nombre de empresa:

Map map = list.stream().collect(
        Collectors.groupingBy(Company::getCompany, 
                              Collectors.mapping((Company c) -> c, Collectors.counting())));

Ahora se vuelve mucho más fácil realizar otras operaciones como desee. Además, aquí en lugar de crear 8 mapas terminas lidiando con solo 1 lista.

Es realmente difícil agrupar y contar un mapa porque los datos de su mapa cambiarán después de que aumente el valor de su contador. Por lo tanto, debe guardar los datos originales del mapa y guardar su valor de contador en el otro mapa. Únete a 2 mapas después de completar el proceso de conteo.

Map, Long> counterData = listBeforeGroup.stream().collect(Collectors.groupingBy(m -> m, Collectors.counting()));

List> listAfterGroup = new ArrayList<>();
for (Map m : counterData.keySet()) 
    Map newMap = new HashMap<>(m);
    newMap.put("count", counterData.get(m));
    listAfterGroup.add(newMap);

Actualice el enfoque de Java 8, no es fácil de depurar

List> listAfterGroup = listBeforeGroup.stream().collect(Collectors.groupingBy(m -> m, Collectors.counting())).entrySet().stream().map(e -> 
    Map newMap = e.getKey();
    newMap.put("count", e.getValue());
    return newMap;
).collect(Collectors.toList());

Si tienes alguna vacilación o capacidad de regenerar nuestro crónica eres capaz de añadir una nota y con mucho gusto lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *