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
}
Inicialice la lista:
List<Company> 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<String, Long> map = list.stream().collect(
Collectors.groupingBy(Company::getCompany,
Collectors.mapping((Company c) -> c, Collectors.counting())));
Ahora resulta mucho más fácil realizar otras operaciones que 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 el valor de su contador en el otro mapa. Únase a 2 mapas después de que se complete su proceso de conteo.
Map<Map<String, Object>, Long> counterData = listBeforeGroup.stream().collect(Collectors.groupingBy(m -> m, Collectors.counting()));
List<Map<String, Object>> listAfterGroup = new ArrayList<>();
for (Map<String, Object> m : counterData.keySet()) {
Map<String, Object> newMap = new HashMap<>(m);
newMap.put("count", counterData.get(m));
listAfterGroup.add(newMap);
}
Actualizar el enfoque de Java 8, no es fácil de depurar
List<Map<String, Object>> listAfterGroup = listBeforeGroup.stream().collect(Collectors.groupingBy(m -> m, Collectors.counting())).entrySet().stream().map(e -> {
Map<String, Object> newMap = e.getKey();
newMap.put("count", e.getValue());
return newMap;
}).collect(Collectors.toList());
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)