I want to create a function to iterate over multiple lists. Now I know these lists have exactly the same size (and they can have different types too), for example:
List<Integer> list1 = getList1();
List<String> list2 = getList2();
List<Long> list3 = getList3();
list1.size() == list2.size(); // returns true
list2.size() == list3.size(); // returns true
And I want to be able to call a function which takes 3 elements at the same slice in each of these lists so for exemple:
int calculate(int elemList1, String elemList2, long elemList3) {...}
// iterator over the lists in parallel {
int ret = calculate(elemList1, elemList2, elemList3);
// }
I would like to do the equivalent of what I saw discussed in guava here but doesn’t look implemented yet: http://code.google.com/p/guava-libraries/issues/detail?id=677
They talk about doing Iterators.interleave or Iterators.zip and I would like to do something similar but I haven’t been able to, so can someone please help me a bit? Thanks!
I would prefer to not have to get the size of one list and iterate over them by index, because in the future i can have lists of different sizes so i would like to use only 1 way to do this.
A compound Iterator might be a cool idea, e.g.:
Then inside the implementation, you would create iterators for each of the lists, then loop through the items and put them into an array, then your consumption of that stuff would look something like:
What’s nice about this solution is you are hiding all those details about whether one list ran out or not (of course you have to decide what you want to do if one does, but that could be wrapped inside as well).