All Downloads are FREE. Search and download functionalities are using the official Maven repository.

norswap.utils.multimap.MultiMapCollector Maven / Gradle / Ivy

The newest version!
package norswap.utils.multimap;

import norswap.utils.Vanilla;
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;

/**
 * See {@link MultiMap#collector(Function, Function)} and {@link MultiMap#setCollector(Function,
 * Function)}.
 */
public final class MultiMapCollector implements Collector, MultiMap>
{
    private final boolean set;
    private final Function keyExtractor;
    private final Function valueExtractor;

    MultiMapCollector (boolean set, Function keyExtractor, Function valueExtractor) {
        this.set = set;
        this.keyExtractor = keyExtractor;
        this.valueExtractor = valueExtractor;
    }

    @Override public Supplier> supplier () {
        return set ? MultiHashSetMap::new : MultiHashMap::new;
    }

    @Override
    public BiConsumer, T> accumulator () {
        return (map, item) -> map.add(keyExtractor.apply(item), valueExtractor.apply(item));
    }

    @Override
    public BinaryOperator> combiner () {
        return (a, b) -> { a.add(b); return a; };
    }

    @Override
    public Function, MultiMap> finisher () {
        return Function.identity();
    }

    @Override
    public Set characteristics () {
        return Vanilla.set(Characteristics.IDENTITY_FINISH, Characteristics.UNORDERED);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy