gpt4 book ai didi

java - 同时提供两个列表内容的迭代器?

转载 作者:IT老高 更新时间:2023-10-28 21:15:59 26 4
gpt4 key购买 nike

假设我有这个:

public class Unit<MobileSuit, Pilot> {

...

List<MobileSuit> mobileSuits;
List<Pilot> pilots;

...
}

并且我想在该类之外以最简单的方式遍历这对。我该怎么做呢?我想过这样做:

public class Unit<MobileSuit, Pilot> {

...
Iterator<MobileSuit> iteratinMechas;
Iterator<Pilot> iteratinPeople;

class IteratorCustom<MobileSuit, Pilot> implements Iterator {

public boolean hasNext() {
return iteratinMechas.hasNext() && iteratinPeople.hasNext();
}

public void remove() {
iteratinMechas.remove();
iteratinPeople.remove();
}

public Object next() {
// /!\
}

}

public Iterator iterator() {
return new IteratorCustom<MobileSuit, Pilot>(mobileSuits, pilots);
}
}

类似的东西。

无论如何,问题是我不能真正从 next() 返回单个对象,而且我也不能让迭代器采用多种类型。那么,有什么想法吗?

另外,我无法创建一个新类(class)来结合 MobileSuit 和 Pilot。我需要将它们分开,即使我一次遍历两者。原因是可能有没有飞行员的机动战士,我不确定如何通过将它们保持在同一级别来解决这个问题。这个类需要在其他地方处理,所以我必须围绕它和很多其他东西统一一个接口(interface)。基本上,假设 MobileSuit 和 Pilot 需要分开。

最佳答案

Anyway, the problem is that I can't really return just a single object from next(), and I also can't have a Iterator take more than one type. So, any thoughts?

显然,您将需要一个轻量级的“pair”类。这大致类似于 Map.Entry 内部类。

这是一个通用解决方案的粗略:

public class ParallelIterator <T1, T2> implements Iterator<Pair<T1, T2>> {

public class Pair<TT1, TT2> {
private final TT1 v1;
private final TT2 v2;
private Pair(TT1 v1, TT2 v2) { this.v1 = v1; this.v2 = v2; }
...
}

private final Iterator<T1> it1;
private final Iterator<T2> it2;

public ParallelIterator(Iterator<T1> it1, Iterator<T2> it2) {
this.it1 = it1; this.it2 = it2;
}

public boolean hasNext() { return it1.hasNext() && it2.hasNext(); }

public Pair<T1, T2> next() {
return new Pair<T1, T2>(it1.next(), it2.next());
}

...

}

注意:这并没有明确处理列表长度不同的情况。将会发生的情况是,较长列表末尾的额外元素将被静默忽略。

关于java - 同时提供两个列表内容的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3137944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com