Java tutorial
/* * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * * Copyright 2016 the original author or authors. * */ package uk.co.lucasweb.stream; import com.google.common.collect.ImmutableSet; import java.util.EnumSet; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collector; /** * Custom {@link Collector} that accumulates the input elements into a Guava {@link ImmutableSet}. * * @param <E> * the type of elements in the set * @author Richard Lucas */ public class ImmutableSetCollector<E> implements Collector<E, ImmutableSet.Builder<E>, ImmutableSet<E>> { public static <E> Collector<E, ?, ImmutableSet<E>> toImmutableSet() { return new ImmutableSetCollector<>(); } @Override public Supplier<ImmutableSet.Builder<E>> supplier() { return ImmutableSet::builder; } @Override public BiConsumer<ImmutableSet.Builder<E>, E> accumulator() { return ImmutableSet.Builder::add; } @Override public BinaryOperator<ImmutableSet.Builder<E>> combiner() { return (left, right) -> { left.addAll(right.build()); return left; }; } @Override public Function<ImmutableSet.Builder<E>, ImmutableSet<E>> finisher() { return ImmutableSet.Builder::build; } @Override public Set<Characteristics> characteristics() { return EnumSet.of(Characteristics.UNORDERED); } }