java - Write a Collector or nest existing ones -


i have method in data structure wish use pass various collectors , apply them object.

the following method -->

 public <r> r applycollector(string key, collector a)     {         this.key = key;         this.a = a;         r result = (r) this.statelist.stream().                 map(state -> state.getkey(key)).collect(a);         return  result;     } 

the above method takes in "key" , collector applies on values got key.

this way i'm using -->

collector stringtolistcollector =                collectors.tolist(); list<string> values =                myobject.applycollector("key",                        stringtolistcollector); 

this works fine simple things getting count, average etc.

but, if wish send more complex, nested collector. example, "key" returns me string, ip or integer.

what i'd send collector first converts string integer doing "integer::parseint" , doing tolist.

right have first retrieve list named values (defined above). , values.stream().map(integer::parsestring).collect(collectors::averagingint).

i might need operation multiple times, have 2 options.

  1. make tolist , map , collect function. , call it. beats purpose of lambda.

  2. write or nest existing collectors directly me. option looks neater me because if can correctly, i'll able in 1 pass instead of 2 passes takes me now, maybe save memory need first create list.

how do this? write collector -->

  • gets object, , runs integer::parseint upon , average operation.

for example like

applycollector("key", mapping(integer::parseint, averagingint(i -> i)) 

collectors can composed extend:

  • collectors.mapping executes function before collecting
  • collectors.collectingandthen executes function after collecting

additionally collectors accept downstream collectors i.e groupingby


Comments