Ordenar List y agrupar con Java 8
Proyecto: Rigemjsf
Clase: InformeConsolidadoController.java
Queremos un informe agrupado por idnivel5 y totalizar cada idnivel6.
Tenemos un Beans llamado consolidado
@Named
@RequestScoped
public class Consolidado {
private Date fecha;
private String nombre;
private Integer idrecibo;
private Double pago;
private String idnivel6;
private String nombrenivel6;
private String idnivel5;
private String nombrenivel5;
public String imprimirTodos() {
try {
/*
agruparlo por idnivel6
*/
Map<String, List<Consolidado>> listAgrupado = listConsolidado
.stream()
.collect(Collectors.groupingBy(p -> p.getIdnivel6()));
//recorrer el list
listAgrupado
.forEach((String idnivel6, List<Consolidado> p) -> {
add(p);
});
//Ordenarlo por nivel5
Collections.sort(listConsolidadoFinal,
(Consolidado a, Consolidado b) -> a.getIdnivel5().compareTo(b.getIdnivel6()));
} catch (Exception ex) {
JSFUtil.addErrorMessage("imprimir() " + ex.getLocalizedMessage());
}
return null;
}
/*
anade a la lista final la sumatoria
*/
//Aqui totalizamos y agregamos objetos al nuevo list
private void add(List<Consolidado> list) {
try {
Double s = 0.0;
s = list.stream().map((i) -> i.getPago()).reduce(s, (accumulator, _item) -> accumulator + _item);
Consolidado icr = new Consolidado();
icr = list.get(0);
icr.setPago(s);
listConsolidadoFinal.add(icr);
} catch (Exception e) {
JSFUtil.addErrorMessage("add() " + e.getLocalizedMessage());
}
}
}
Comments