Вы не можете напрямую создать Карту с двумя ключами, однако вы можете объединить их.
Самый простой способ - сериализовать их в строку и объединить.
String key = obj1.toString() + "-" + obj2.toString();
myMap.put( key, myValue );
предполагая, что объекты могут быть легко сериализованы в строку, которая будет уникальной.
Если это не так, то создание объекта-оболочки - ваш лучший вариант.Вам необходимо определить объект, который переопределяет метод equals () и hashCode ().
В качестве грубого примера
class CombinedKey{
private MyClass object1;
private MyClass object2;
public CombinedKey( MyClass object1, MyClass object2 ){
this.object1 = object1;
this.object2 = object2;
}
public int hashCode(){
return object1.hashCode() + object2.hashCode();
}
@Override
public Boolean equals( Object otherObject ){
if( otherObject == null || otherObject.getObject1() == null ) return false;
return object1.equals( otherObject.getObject1() ) && object2.equals( otherObject.getObject2();
}
public MyClass getObject1() { return object1; }
public MyClass getObject2() { return object2; }
}
(Вы также можете рассмотреть возможность использования Generics для определения этогокласс, поэтому его можно использовать в других сценариях)
Использование:
Map<CombinedKey, Object> myMap = new HashMap<CombinedKey, Object>();
myMap.put( new CombinedKey(obj1, obj2), value );