21 package org.matsim.api.core.v01;
24 import java.util.Objects;
25 import java.util.function.BinaryOperator;
26 import java.util.function.Function;
27 import java.util.stream.Collector;
28 import java.util.stream.Collector.Characteristics;
30 import com.google.common.base.Preconditions;
36 public static <T, K, V> Collector<T, ?, IdMap<K, V>>
toIdMap(Class<K> idClass, Function<? super T, ? extends
Id<K>> keyMapper,
37 Function<? super T, ? extends V> valueMapper) {
43 Id<K> k = keyMapper.apply(element);
44 V v = Objects.requireNonNull(valueMapper.apply(element));
45 V u = map.putIfAbsent(k, v);
46 Preconditions.checkState(u == null,
"Duplicate key %s (attempted merging values %s and %s)", k, u, v);
50 for (Map.Entry<
Id<K>, V> e : m2.entrySet()) {
52 V v = Objects.requireNonNull(e.getValue());
53 V u = m1.putIfAbsent(k, v);
54 Preconditions.checkState(u == null,
"Duplicate key %s (attempted merging values %s and %s)", k, u, v);
59 Characteristics.IDENTITY_FINISH);
62 public static <T, K, V> Collector<T, ?, IdMap<K, V>>
toIdMap(Class<K> idClass, Function<? super T, ? extends
Id<K>> keyMapper,
63 Function<? super T, ? extends V> valueMapper, BinaryOperator<V> mergeFunction) {
68 (map, element) -> map.merge(keyMapper.apply(element), valueMapper.apply(element), mergeFunction),
71 for (Map.Entry<
Id<K>, V> e : m2.entrySet())
72 m1.merge(e.getKey(), e.getValue(), mergeFunction);
76 Characteristics.IDENTITY_FINISH);
87 if (left.size() < right.size()) {
96 Characteristics.UNORDERED, Characteristics.IDENTITY_FINISH);
static< T > Collector< Id< T >, ?, IdSet< T > > toIdSet(Class< T > idClass)
static< T, K, V > Collector< T, ?, IdMap< K, V > > toIdMap(Class< K > idClass, Function<? super T, ? extends Id< K >> keyMapper, Function<? super T, ? extends V > valueMapper)
boolean add(Id< T > value)
static< T, K, V > Collector< T, ?, IdMap< K, V > > toIdMap(Class< K > idClass, Function<? super T, ? extends Id< K >> keyMapper, Function<? super T, ? extends V > valueMapper, BinaryOperator< V > mergeFunction)