我想做这样的事,有人做过类似的事吗? 我有一个解决方案图有两个键,我用它来进行地理定位,但我想用n个键来代替它。
import java.util.Collection;
import java.util.Set;
public interface NKeyMap<K..., V> {
public void clear();
public boolean containsKey(K...);
public boolean containsValue(V value);
public V get(K...);
public boolean isEmpty();
public V put(K..., V value);
public V removeK..., V value);
public int size();
public Collection<V> values();
public Set<K...> keys();
}
答案 0 :(得分:2)
看看这个post该人试图通过链接pair
他这样做
Pair<String, Integer> pair = Pairs.pair("hello", 5);
Pair<Double, Pair<String, Integer>> withDouble = Pairs.pair(3.0, pair);
并建议以下使其更清洁
public class Pair<T, U> { ...
public <V> Pair<V, Pair<T, U>> prepend(V v) {
return pair(v, this); } }
这样就变成了
Pair<Double, Pair<String, Integer>> pair = Pairs.pair("hello", 5).prepend(3.0);
注意:您可能需要写Pair
。
注意:他似乎最终支持javatuples ..
更相关:
阅读完评论后,这个更明显的解决方案呈现出来。 多维地图,就像多维数组一样
Map<XKey, Map<YKey, Value> >
答案 1 :(得分:2)
你不能做var-arg泛型,但你可以做类似下面的事情
import java.util.Collection;
import java.util.Set;
public interface NKeyMap<K, V> {
public void clear();
public boolean containsKey(K... k );
public boolean containsValue(V value);
public V get(K... k);
public boolean isEmpty();
public V put(V value, K...k);
public V remove(V value, K... k);
public int size();
public Collection<V> values();
public Set<K> keys();
}
答案 2 :(得分:1)
如果你需要可变长度的密钥,你可以使用javatuples或类似的东西,它包含任意数字和任意类型的参数(它们提供元组直到10的长度):
Map<Triplet<Double,Float,Integer>, Object> mapWithCombinedKeys = ...