Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Item Reader for a Map in Spring Batch?

I have a simple HashMap, and it seems like there's no way to pass it to any standard ItemReader from Spring Batch which I find quite frustrating. Will I have to write my own Item Reader in order to process a HashMap or is there something that I'm missing ?

like image 277
Zed Avatar asked Dec 02 '25 10:12

Zed


1 Answers

Well it depends on what your items are: keys, values or entries of your map.

You can use the ListItemReader and pass keys, values or entries as a list in its constructor. For example:

Map<Integer, String> items = new HashMap<>();
items.put(1, "foo");
items.put(2, "bar");

ListItemReader<Integer> keysItemReader = new ListItemReader<>(new ArrayList<>(items.keySet()));
ListItemReader<String> valuesItemReader = new ListItemReader<>(new ArrayList<>(items.values()));
ListItemReader<Map.Entry<Integer, String>> entriesItemReader = new ListItemReader<>(new ArrayList<>(items.entrySet()));

You can also use the IteratorItemReader and pass the iterator on your items to it in the constructor:

IteratorItemReader<Map.Entry<Integer, String>> iteratorItemReader = new IteratorItemReader<>(items.entrySet().iterator());
// same for keys or values
like image 135
Mahmoud Ben Hassine Avatar answered Dec 04 '25 23:12

Mahmoud Ben Hassine



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!