@Override public Iterator<E> descendingIterator() { return decorated().descendingIterator(); }
@Override public E pollFirst() { return decorated().pollFirst(); }
@Override public E pollLast() { return decorated().pollLast(); }
@Override public E floor(final E e) { return decorated().floor(e); }
@Override public E ceiling(final E e) { return decorated().ceiling(e); }
@Override public E lower(final E e) { return decorated().lower(e); }
@Override public E higher(final E e) { return decorated().higher(e); }
@Override public NavigableSet<E> tailSet(final E fromElement, final boolean inclusive) { final NavigableSet<E> tail = decorated().tailSet(fromElement, inclusive); return transformingNavigableSet(tail, transformer); }
@Override public NavigableSet<E> subSet(final E fromElement, final boolean fromInclusive, final E toElement, final boolean toInclusive) { final NavigableSet<E> sub = decorated().subSet(fromElement, fromInclusive, toElement, toInclusive); return transformingNavigableSet(sub, transformer); }
@Override public NavigableSet<E> headSet(final E toElement, final boolean inclusive) { final NavigableSet<E> head = decorated().headSet(toElement, inclusive); return transformingNavigableSet(head, transformer); }
@Override public NavigableSet<E> descendingSet() { return transformingNavigableSet(decorated().descendingSet(), transformer); }
/** * Factory method to create a transforming navigable set that will transform * existing contents of the specified navigable set. * <p> * If there are any elements already in the set being decorated, they * will be transformed by this method. * Contrast this with {@link #transformingNavigableSet(NavigableSet, Transformer)}. * * @param <E> the element type * @param set the set to decorate, must not be null * @param transformer the transformer to use for conversion, must not be null * @return a new transformed {@link NavigableSet} * @throws NullPointerException if set or transformer is null */ public static <E> TransformedNavigableSet<E> transformedNavigableSet(final NavigableSet<E> set, final Transformer<? super E, ? extends E> transformer) { final TransformedNavigableSet<E> decorated = new TransformedNavigableSet<>(set, transformer); if (set.size() > 0) { @SuppressWarnings("unchecked") // set is type E final E[] values = (E[]) set.toArray(); // NOPMD - false positive for generics set.clear(); for (final E value : values) { decorated.decorated().add(transformer.transform(value)); } } return decorated; }