下面列出了怎么用com.google.common.collect.ForwardingIterator的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public Iterator<E> iterator() {
final class ReadOnlyIterator extends AbstractIterator<E> {
Node<E> current = top.get();
@Override
protected E computeNext() {
for (;;) {
if (current == null) {
return endOfData();
}
E e = current.get();
current = current.next;
if (e != null) {
return e;
}
}
}
};
return new ForwardingIterator<E>() {
final ReadOnlyIterator delegate = new ReadOnlyIterator();
@Override
public void remove() {
checkState(delegate.current != null);
delegate.current.lazySet(null);
}
@Override
protected Iterator<E> delegate() {
return delegate;
}
};
}
@Override
public Collection<Resource> values() {
if (localContents.isEmpty()) {
return Collections.emptyList();
}
// Nasty ... we have to support values().iterator().remove()
Collection<Resource> base = super.values();
Collection<Resource> delegate = Collections2.filter(base,
resource -> localContents.contains(resource.getURI()));
return new ForwardingCollection<>() {
@Override
protected Collection<Resource> delegate() {
return delegate;
}
@Override
public Iterator<Resource> iterator() {
Iterator<URI> delegateIterator = localContents.iterator();
Iterator<Resource> resourceIterator = Iterators.transform(delegateIterator, globalMap::get);
return new ForwardingIterator<>() {
private URI prev = null;
@Override
protected Iterator<Resource> delegate() {
return resourceIterator;
}
public Resource next() {
Resource result = super.next();
prev = result.getURI();
return result;
}
public void remove() {
super.remove();
globalMap.remove(prev);
}
};
}
};
}