Last active
November 3, 2016 23:49
-
-
Save robertmassaioli/3dca9901c0961c623768bcbc21bf6759 to your computer and use it in GitHub Desktop.
An ImmutableMultimapCollector in Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.google.common.collect.ImmutableMultimap; | |
import com.google.common.collect.ImmutableSet; | |
import java.util.Map; | |
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; | |
public class ImmutableMultimapCollector<K, V> implements Collector<Map.Entry<K, V>, ImmutableMultimap.Builder<K, V>, ImmutableMultimap<K, V>> { | |
@Override | |
public Supplier<ImmutableMultimap.Builder<K, V>> supplier() { | |
return ImmutableMultimap::builder; | |
} | |
@Override | |
public BiConsumer<ImmutableMultimap.Builder<K, V>, Map.Entry<K, V>> accumulator() { | |
return (kvBuilder, kvEntry) -> kvBuilder.put(kvEntry.getKey(), kvEntry.getValue()); | |
} | |
@Override | |
public BinaryOperator<ImmutableMultimap.Builder<K, V>> combiner() { | |
return (kvBuilder, kvBuilder2) -> ImmutableMultimap.<K, V>builder() | |
.putAll(kvBuilder.build()) | |
.putAll(kvBuilder2.build()); | |
} | |
@Override | |
public Function<ImmutableMultimap.Builder<K, V>, ImmutableMultimap<K, V>> finisher() { | |
return ImmutableMultimap.Builder::build; | |
} | |
@Override | |
public Set<Characteristics> characteristics() { | |
return ImmutableSet.of(Characteristics.CONCURRENT, Characteristics.UNORDERED); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private Map<String, Collection<String>> exampleUsage(URI targetPath) { | |
return URLEncodedUtils.parse(targetPath, "UTF-8").stream() | |
.map(pair -> new AbstractMap.SimpleImmutableEntry<>(pair.getName(), pair.getValue())) | |
.collect(new ImmutableMultimapCollector<>()) | |
.asMap(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment