Я не понимаю, что делает 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)). Спасибо.