Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java lambda aggregator

Tags:

java

lambda

I have a list

PLANS:

ID,    A_CODE, COMPARTMENT
10683   163     213 
10683   616     194
10683   163     212
10683   163     211
10683   163     214

and want to produce AGGREGATED_PLANS

ID      A_CODE  COMPARTMENTS
10683   163     211/212/213/214
10683   616     194

How can I do this using java lambda expression ?

I am thinking something like this, but not sure about the aggregateCompartments part ?

plans.stream()
     .collect(groupingBy(Plan::getACode, 
           aggregateCompartments(Plan::getCompartments)));

Any suggestions ?

like image 450
Tezza Avatar asked Apr 21 '26 02:04

Tezza


1 Answers

this may help you:

    List<Plan> plans = new ArrayList<>();
    plans.add(new Plan("10683", "163", "213"));
    plans.add(new Plan("10683", "616", "194"));
    plans.add(new Plan("10683", "163", "212"));
    plans.add(new Plan("10683", "163", "211"));
    plans.add(new Plan("10683", "163", "214"));

    System.out.println(
        plans.stream().collect(
               Collectors.groupingBy(p -> p.id + " " + p.aCode, 
               Collectors.mapping(Plan::getCompartment, Collectors.joining("/")))));

output:

{10683 616=194, 10683 163=213/212/211/214}
like image 99
Taher Khorshidi Avatar answered Apr 22 '26 17:04

Taher Khorshidi