No puede crear directamente un Mapa con dos teclas, sin embargo, puede combinar las dos.
El método más simple es serializarlos en una cadena y combinarlos.
String key = obj1.toString() + "-" + obj2.toString();
myMap.put(key, myValue);
suponiendo que los objetos se pueden serializar fácilmente en una cadena que sería única.
Si este no es el caso, la mejor opción es crear un objeto envoltorio. Debería definir un objeto que anule el método equals() y hashCode().
Como ejemplo aproximado
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; }
}
(También puede ser que desee considerar el uso de medicamentos genéricos para definir esta clase para que pueda ser reutilizado en otros escenarios)
Uso:
Map<CombinedKey, Object> myMap = new HashMap<CombinedKey, Object>();
myMap.put(new CombinedKey(obj1, obj2), value);
@Hieko: Inventive.¿Conoces una fuente que explique las clases de ayuda porque no estoy familiarizado con el concepto? –
Una clase de ayuda no es un concepto especial como tal, es solo una clase normal que envuelve sus dos subobjetos y los trata como si fueran uno solo. Vea mi ejemplo a continuación para obtener un ejemplo de código más detallado. –
@Hieko El problema clave radica en cómo implementar equals y hashcode correctamente. –