2

我想做这样的事情,有人做过类似的事情吗?我有一个有两个键的解决方案地图,我将它用于地理定位,但我想用 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();
}
4

3 回答 3

2

你不能做 var-arg generic 但你可以做类似下面的事情

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();
}
于 2013-08-16T07:18:48.930 回答
2

看看这篇文章这个人试图通过链接来模拟这个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> >
于 2013-08-16T07:16:20.150 回答
1

如果您需要可变长度的键,您可以使用javatuples或类似的东西,它们包装任意数量和任意类型的参数(它们提供长度为 10 的元组):

Map<Triplet<Double,Float,Integer>, Object> mapWithCombinedKeys = ...

于 2013-08-16T07:15:23.317 回答