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
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.