package com.lambdaworks.redis.internal; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * Static utility methods for {@link Set} instances. This class is part of the internal API and may change without further * notice. * * @author Mark Paluch * @since 4.2 */ @SuppressWarnings("varargs") public final class LettuceSets { /** * prevent instances. */ private LettuceSets() { } /** * Creates a new {@code HashSet} containing all elements from {@code elements}. * * @param elements the elements that the set should contain, must not be {@literal null}. * @param <T> the element type * @return a new {@code HashSet} containing all elements from {@code elements}. */ public static <T> Set<T> newHashSet(Collection<? extends T> elements) { LettuceAssert.notNull(elements, "Collection must not be null"); HashSet<T> set = new HashSet<>(elements.size()); set.addAll(elements); return set; } /** * Creates a new {@code HashSet} containing all elements from {@code elements}. * * @param elements the elements that the set should contain, must not be {@literal null}. * @param <T> the element type * @return a new {@code HashSet} containing all elements from {@code elements}. */ @SuppressWarnings("unchecked") public static <T> Set<T> newHashSet(Iterable<? extends T> elements) { LettuceAssert.notNull(elements, "Iterable must not be null"); if (elements instanceof Collection<?>) { return newHashSet((Collection<T>) elements); } Set<T> set = new HashSet<>(); for (T e : elements) { set.add(e); } return set; } /** * Creates a new {@code HashSet} containing all elements from {@code elements}. * * @param elements the elements that the set should contain, must not be {@literal null}. * @param <T> the element type * @return a new {@code HashSet} containing all elements from {@code elements}. */ @SafeVarargs public static <T> Set<T> newHashSet(T... elements) { LettuceAssert.notNull(elements, "Elements must not be null"); HashSet<T> set = new HashSet<>(elements.length); Collections.addAll(set, elements); return set; } /** * Creates a new unmodifiable {@code HashSet} containing all elements from {@code elements}. * * @param elements the elements that the set should contain, must not be {@literal null}. * @param <T> the element type * @return a new {@code HashSet} containing all elements from {@code elements}. */ @SafeVarargs public static <T> Set<T> unmodifiableSet(T... elements) { return Collections.unmodifiableSet(newHashSet(elements)); } }