@Override public Iterator<E> descendingIterator() { return Iterators.filter(unfiltered().descendingIterator(), predicate); }
@Override public E higher(E e) { return Iterables.find(unfiltered().tailSet(e, false), predicate, null); }
@Override public E ceiling(E e) { return Iterables.find(unfiltered().tailSet(e, true), predicate, null); }
@Override public E higher(E e) { return Iterables.find(unfiltered().tailSet(e, false), predicate, null); }
@Override public E last() { return Iterators.find(unfiltered().descendingIterator(), predicate); }
@Override public E pollFirst() { return Iterables.removeFirstMatching(unfiltered(), predicate); }
@Override public NavigableSet<E> tailSet(E fromElement, boolean inclusive) { return filter(unfiltered().tailSet(fromElement, inclusive), predicate); } }
@Override @NullableDecl public E floor(E e) { return Iterators.find(unfiltered().headSet(e, true).descendingIterator(), predicate, null); }
@Override public Iterator<E> descendingIterator() { return Iterators.filter(unfiltered().descendingIterator(), predicate); }
@Override public NavigableSet<E> subSet( E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { return filter( unfiltered().subSet(fromElement, fromInclusive, toElement, toInclusive), predicate); }
@Override @NullableDecl public E lower(E e) { return Iterators.find(unfiltered().headSet(e, false).descendingIterator(), predicate, null); }
@Override public NavigableSet<E> descendingSet() { return Sets.filter(unfiltered().descendingSet(), predicate); }
@Override public E pollFirst() { return Iterables.removeFirstMatching(unfiltered(), predicate); }
@Override public @Nullable E floor(E e) { return Iterators.find(unfiltered().headSet(e, true).descendingIterator(), predicate, null); }
@Override public @Nullable E lower(E e) { return Iterators.find(unfiltered().headSet(e, false).descendingIterator(), predicate, null); }
@Override public E last() { return Iterators.find(unfiltered().descendingIterator(), predicate); }
@Override public E pollLast() { return Iterables.removeFirstMatching(unfiltered().descendingSet(), predicate); }
@Override public NavigableSet<E> headSet(E toElement, boolean inclusive) { return filter(unfiltered().headSet(toElement, inclusive), predicate); }
@Override public NavigableSet<E> tailSet(E fromElement, boolean inclusive) { return filter(unfiltered().tailSet(fromElement, inclusive), predicate); } }
@Override public NavigableSet<E> subSet( E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { return filter( unfiltered().subSet(fromElement, fromInclusive, toElement, toInclusive), predicate); }