【发布时间】:2013-01-25 00:39:18
【问题描述】:
我想创建一个函数来迭代多个列表。现在我知道这些列表的大小完全相同(它们也可以有不同的类型),例如:
List<Integer> list1 = getList1();
List<String> list2 = getList2();
List<Long> list3 = getList3();
list1.size() == list2.size(); // returns true
list2.size() == list3.size(); // returns true
我希望能够调用一个函数,该函数在每个列表的同一切片中获取 3 个元素,例如:
int calculate(int elemList1, String elemList2, long elemList3) {...}
// iterator over the lists in parallel {
int ret = calculate(elemList1, elemList2, elemList3);
// }
我想做与我在 guava 中讨论的内容相同但看起来尚未实现的内容:http://code.google.com/p/guava-libraries/issues/detail?id=677
他们谈论做 Iterators.interleave 或 Iterators.zip,我想做类似的事情,但我做不到,所以有人可以帮我一下吗?谢谢!
我宁愿不必获取一个列表的大小并按索引对其进行迭代,因为将来我可以拥有不同大小的列表,所以我只想使用一种方法来做到这一点。
【问题讨论】:
-
您是在尝试使用 zip 技术同时迭代多个列表,还是实际上在这里尝试多线程?
-
IIRC 这从未被决定,因此从未实施。我通过创建一个以索引为键的多映射并添加每个集合的项目来伪造它(因为我不能保证集合类似于 ArrayList,所以 get(n) 不是确定性的)。
-
不,我只是想同时使用类似 zip 的东西进行迭代,就像我解释的那样,我想做一些类似于他们在 guava 上讨论的事情。
-
Guava 解决方案看起来具有处理您不需要的不同大小列表的逻辑。