是否存在以以下方式工作的集合:
//何时
value1 -> value2
value3 -> value4
//这样
value2 is the opposite of value1
and
value4 is the opposite of value3
//然后 这些请求应如下工作:
request in:value1 return out:value2
request in:value2 return out:value1
等
我想我可以使用函数来做到这一点,但想知道是否为此有专门的集合。
答案 0 :(得分:2)
您似乎正在寻找可逆的映射。已经对此进行了详细讨论:Java invert map。
该先前讨论的链接之一是指向Apache解决方案:https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.2/org/apache/commons/collections/BidiMap.html。
虽然Java没有可以有效处理此问题的集合类型,但是您可以通过将两个地图放在一起来自己制作一个
public class BiDiMap<T1, T2> {
private final Map<T1, T2> forwardMap = new HashMap<T1, T2>();
private final Map<T2, T1> reverseMap = new HashMap<T2, T1>();
public void put(T1 t1, T2 t2) {
T2 oldT2 = forwardMap.put(t1, t2);
T1 oldT1 = reverseMap.put(t2, t1);
}
public void remove(T1 t1, T2 t2) {
T2 currentT2 = forwardMap.get(t1);
if ( currentT2 != t2 ) {
// This is an error.
}
T1 currentT1 = reverseMap.get(t2);
if ( currentT1 != t1 ) {
// Also an error.
}
forwardMap.remove(t1);
reverseMap.remove(t2);
}
public T2 getForward(T1 t1) {
return forwardMap.get(t1);
}
public T1 getReverse(T2 t2) {
return reverseMap.get(t2);
}
}
以此类推。
这假定映射是一对一的。如果映射是一对多,多对一或多对多,则实现方式有所不同。