/** * 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 SortedSet<E> tailSet(final E fromElement) { final SortedSet<E> set = getSortedSet().tailSet(fromElement); return new TransformedSortedSet<>(set, transformer); }
@Override public SortedSet<E> headSet(final E toElement) { final SortedSet<E> set = getSortedSet().headSet(toElement); return new TransformedSortedSet<>(set, transformer); }
@Override public SortedSet<E> subSet(final E fromElement, final E toElement) { final SortedSet<E> set = getSortedSet().subSet(fromElement, toElement); return new TransformedSortedSet<>(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; }