
norswap.utils.multimap.MultiMapCollector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of utils Show documentation
Show all versions of utils Show documentation
A collection of Java (8+) utilities
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