org.aksw.commons.collections.multimaps.MultimapUtils Maven / Gradle / Ivy
package org.aksw.commons.collections.multimaps;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Collectors;
import org.aksw.commons.collections.MultiMaps;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.SetMultimap;
import com.google.common.collect.Sets;
/**
* Created by IntelliJ IDEA.
* User: raven
* Date: 4/25/11
* Time: 9:26 PM
* To change this template use File | Settings | File Templates.
*/
public class MultimapUtils {
public static SetMultimap newIdentitySetMultimap() {
return Multimaps.newSetMultimap(Maps.newIdentityHashMap(), Sets::newIdentityHashSet);
}
public static ListMultimap newIdentityListMultimap() {
return Multimaps.newListMultimap(Maps.newIdentityHashMap(), ArrayList::new);
}
public static Set getAll(Multimap multiMap, Collection keys) {
Set result = keys.stream()
.flatMap(k -> multiMap.get(k).stream())
.collect(Collectors.toSet());
return result;
}
/**
* A transitive get in both directions
*
* @param map
*/
public static Set transitiveGetBoth(IBiSetMultimap map, Object key)
{
Set result = MultiMaps.transitiveGet(map.asMap(), key);
result.addAll(MultiMaps.transitiveGet(map.getInverse().asMap(), key));
return result;
}
/**
* Helper function to convert a multimap into a map.
* Each key may only have at most one corresponding value,
* otherwise an exception will be thrown.
*
* @param mm
* @return
*/
public static Map toMap(Map> mm) {
// Convert the multimap to an ordinate map
Map result = new HashMap();
for(Entry> entry : mm.entrySet()) {
K k = entry.getKey();
Collection vs = entry.getValue();
if(!vs.isEmpty()) {
if(vs.size() > 1) {
throw new RuntimeException("Ambigous mapping for " + k + ": " + vs);
}
V v = vs.iterator().next();
result.put(k, v);
}
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy