Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I iterate over multiple lists in parallel in Java? [duplicate]

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.

like image 836
darkuzul Avatar asked Dec 11 '22 18:12

darkuzul


1 Answers

I don't think you are really saying in parallel, since the values are being used to invoke a method. If you want the same elements from each list, concurrently skipping through different lists on different threads does you no good.

You just need to do a for loop and then call list1.get(i), list2.get(i), list3.get(i).

like image 153
Rob Avatar answered May 17 '23 23:05

Rob