@Override public SortedSet<E> tailSet(final E fromElement) { final SortedSet<E> set = getSortedSet().tailSet(fromElement); return new TransformedSortedSet<>(set, transformer); }
/** * Gets the decorated set. * * @return the decorated set */ protected SortedSet<E> getSortedSet() { return (SortedSet<E>) decorated(); }
/** * Returns a transformed sorted set backed by the given set. * <p> * Each object is passed through the transformer as it is added to the * Set. It is important not to use the original set after invoking this * method, as it is a backdoor for adding untransformed objects. * <p> * Existing entries in the specified set will not be transformed. * If you want that behaviour, see {@link TransformedSortedSet#transformedSortedSet}. * * @param <E> the element type * @param set the set to transform, must not be null * @param transformer the transformer for the set, must not be null * @return a transformed set backed by the given set * @throws NullPointerException if the set or transformer is null */ public static <E> SortedSet<E> transformedSortedSet(final SortedSet<E> set, final Transformer<? super E, ? extends E> transformer) { return TransformedSortedSet.transformingSortedSet(set, transformer); }
/** * Factory method to create a transforming sorted set that will transform * existing contents of the specified sorted set. * <p> * If there are any elements already in the set being decorated, they * will be transformed by this method. * Contrast this with {@link #transformingSortedSet(SortedSet, 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 SortedSet} * @throws NullPointerException if set or transformer is null * @since 4.0 */ public static <E> TransformedSortedSet<E> transformedSortedSet(final SortedSet<E> set, final Transformer<? super E, ? extends E> transformer) { final TransformedSortedSet<E> decorated = new TransformedSortedSet<>(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; }
@Override public Comparator<? super E> comparator() { return getSortedSet().comparator(); }
/** * Factory method to create a transforming sorted set. * <p> * If there are any elements already in the set being decorated, they * are NOT transformed. * Contrast this with {@link #transformedSortedSet(SortedSet, 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 SortedSet} * @throws NullPointerException if set or transformer is null * @since 4.0 */ public static <E> TransformedSortedSet<E> transformingSortedSet(final SortedSet<E> set, final Transformer<? super E, ? extends E> transformer) { return new TransformedSortedSet<>(set, transformer); }
@Override public E last() { return getSortedSet().last(); }
@Override public SortedSet<E> headSet(final E toElement) { final SortedSet<E> set = getSortedSet().headSet(toElement); return new TransformedSortedSet<>(set, transformer); }
@Override public E first() { return getSortedSet().first(); }
/** * Gets the decorated navigable set. * * @return the decorated navigable set */ @Override protected NavigableSet<E> decorated() { return (NavigableSet<E>) super.decorated(); }
@Override public SortedSet<E> subSet(final E fromElement, final E toElement) { final SortedSet<E> set = getSortedSet().subSet(fromElement, toElement); return new TransformedSortedSet<>(set, transformer); }