Java:迭代2个列表的最佳/优雅方式

Jim*_*Jim 6 java iteration list arraylist

假设我有一个List<SomeObject> a.
现在还假设我有另一个List<SomeProcessor> b.
每一个SomeProcessor使用a它的处理.

除了:

int idx = 0;   
for(SomeProcessor o:b){  
    o2 = a.get(idx);  
    o.doSomething(o2);  
    idx++;   
}
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式来处理这个问题吗?

Ale*_*x D 7

public interface Processor<T> {
    public void process(T object);
}
Run Code Online (Sandbox Code Playgroud)

然后是辅助方法:

public static <T> void processAll(Collection<T> items, Collection<? extends Processor<T>> processors) {
    Iterator<T> i = items.iterator();
    Iterator<? extends Processor<T>> p = processors.iterator();
    while(i.hasNext() && p.hasNext())
        p.next().process(i.next()); 
}
Run Code Online (Sandbox Code Playgroud)

您可以将该帮助器方法放在使用它的类上,如果只有一个(并使其成为private),或者将它放在由整个程序共享的实用程序类中.

当然还有其他编码方式processAll; 例如,您可以for在其中一个集合上使用循环.但无论如何,将这种低级代码分解为辅助方法将使您的高级代码更清晰,更少"嘈杂".如果你在程序的多个部分做类似的事情,他们可以共享帮助方法.