我不明白 action.accept(val) 做了什么,已经搜索过了,我知道必须这样做,只是不知道为什么。
这是一个我不明白的简单示例:
public class CachedSpliterator <T> extends Spliterators.AbstractSpliterator
{
Spliterator<T> spliterator;
int index;
ArrayList<T> cache;
public CachedSpliterator(Spliterator<T> spliterator, ArrayList<T> cache) {
super(spliterator.characteristics(), 0);
this.spliterator=spliterator;
index=0;
this.cache=cache;
}
public boolean tryAdvance(Consumer action){
if(index<cache.size()){
action.accept(cache.get(index));
index++;
return true;
}
else{
return spliterator.tryAdvance(val->{
cache.add(val);
index++;
action.accept(val);
});
}
}
因此,例如,在这段代码中,我知道我们有一个消费者,它消耗来自源(在本例中为拆分器)的每个元素,并且每个元素都必须被操作接受。所以在我看来,动作是 cache.add(val) 和变量索引的增量,我不明白为什么最后一行 (action.accept(val)) 必须写。谢谢你。