Tuesday, December 16, 2014

Ordenar List y agrupar con Java 8

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());
       }


   }


   }

No comments: