Java 8 Stream with batch processing -


i have large file contains list of items.

i create batch of items, make http request batch (all of items needed parameters in http request). can for loop, java 8 lover, want try writing java 8's stream framework (and reap benefits of lazy processing).

example:

list<string> batch = new arraylist<>(batch_size); (int = 0; < data.size(); i++) {   batch.add(data.get(i));   if (batch.size() == batch_size) process(batch); }  if (batch.size() > 0) process(batch); 

i want long line of lazyfilestream.group(500).map(processbatch).collect(tolist())

what best way this?

you jooλ, library extends java 8 streams single-threaded, sequential stream use-cases:

seq.seq(lazyfilestream)              // seq<string>    .zipwithindex()                   // seq<tuple2<string, long>>    .groupby(tuple -> tuple.v2 / 500) // map<long, list<string>>    .foreach((index, batch) -> {        process(batch);    }); 

behind scenes, zipwithindex() just:

static <t> seq<tuple2<t, long>> zipwithindex(stream<t> stream) {     final iterator<t> = stream.iterator();      class zipwithindex implements iterator<tuple2<t, long>> {         long index;          @override         public boolean hasnext() {             return it.hasnext();         }          @override         public tuple2<t, long> next() {             return tuple(it.next(), index++);         }     }      return seq(new zipwithindex()); } 

... whereas groupby() api convenience for:

default <k> map<k, list<t>> groupby(function<? super t, ? extends k> classifier) {     return collect(collectors.groupingby(classifier)); } 

(disclaimer: work company behind jooλ)


Comments

Popular posts from this blog

Magento/PHP - Get phones on all members in a customer group -

php - .htaccess mod_rewrite for dynamic url which has domain names -

Website Login Issue developed in magento -