ProjectAres/Util/core/src/main/java/tc/oc/commons/core/util/LinkedHashMultimap.java

43 lines
1.1 KiB
Java

package tc.oc.commons.core.util;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Set;
import com.google.common.base.Supplier;
import com.google.common.collect.ForwardingSetMultimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.SetMultimap;
/**
* {@link SetMultimap} that preserves the insertion order of values
*/
public class LinkedHashMultimap<K, V> extends ForwardingSetMultimap<K, V> {
private final SetMultimap<K, V> delegate = Multimaps.newSetMultimap(
new HashMap<K, Collection<V>>(),
new Supplier<Set<V>>() {
@Override
public Set<V> get() {
return new LinkedHashSet<V>();
}
}
);
@Override
protected SetMultimap<K, V> delegate() {
return delegate;
}
/**
* Add the given key-value pair to the map, forcing the value to the end
* of the key's list if it is already present.
*/
public boolean force(K key, V value) {
boolean added = !remove(key, value);
put(key, value);
return added;
}
}