我想知道是否有可能為迭代器創建一個并行,就像 Python 所做的那樣。
python的一個例子是:
foo = (1, 2, 3)
bar = (4, 5, 6)
for (f, b) in some_iterator(foo, bar):
print("f: ", f, "; b: ", b)
我不一定想要真正的并行或使用執行緒和所有,只是有一個類來給你并行運行 tu 串列的想法。
我的想法是使用泛型和可迭代物件,讓我向您展示我未完成的代碼只是為了解釋我的想法:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class ParallelList<T> implements Iterable<List<T>> {
private final List<List<T>> lists;
public ParallelList(List<T>... lists) {
this.lists = new ArrayList<List<T>>(lists.length);
this.lists.addAll(Arrays.asList(lists));
}
public Iterator<List<T>> iterator() {
return new Iterator<List<T>>() {
private int loc = 0;
public boolean hasNext() {
boolean hasNext = false;
for (List<T> list : lists) {
hasNext |= (loc < list.size());
}
return hasNext;
}
public List<T> next() {
List<T> vals = new ArrayList<T>(lists.size());
for (int i=0; i<lists.size(); i ) {
vals.add(loc < lists.get(i).size() ? lists.get(i).get(loc) : null);
}
loc ;
return vals;
}
public void remove() {
for (List<T> list : lists) {
if (loc < list.size()) {
list.remove(loc);
}
}
}
};
}
}
我的想法是使用 iterables 來做到這一點,然后在類中的那些 iterables 上使用 FOR 來模擬并行 FOR,但我被困在 FOR 部分,我不知道如何為所有人創建一個“動態”我能得到的可迭代物件,或者如何去做。你有什么建議來實作這一目標?
uj5u.com熱心網友回復:
此操作通常稱為zip. 如果您想檢查一個實作,JOOL庫提供了一種非常好的Seq.zip()方法,它可以將兩個集合的元素壓縮為元組。
例如
Seq.of(1, 2, 3).zip(Seq.of("a", "b", "c"));
回傳一個
Seq.of(tuple(1, "a"), tuple(2, "b"), tuple(3, "c"));
我想念Kotlin使這些操作變得多么簡單:D。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311182.html
