Da quello che vedo mi pare normale che ti restituisca sempre un unico risultato come destinazione, non dovresti creare un nuovo Operatore ogni volta, altrimenti ovviamente lo sovrascrive all'interno della mappa, ma a quello che dici non mi pare che vada bene nel tuo caso ...

Il secondo metodo addDestination che hai postato è più vicino a quella che mi sembra essere la soluzione, c'è solo un piccolo particolare :

codice:
for(String s : operatorNames) {
	Operator o = elencoOperatori.get(s);
	if(o == null) {
		elencoOperatori.put(s, new Operator(s));
	}
	Operator o2 = new Operator(s);
	o2.setDestinazione(destinationName);
	d2.setOperatore(s);
}
Qui giustamente controlli per ogni nome se è già presente un operatore con quel dato nome, ma dopo il primo if (o == null) dovresti mettere un ramo else (altrimenti effettui un doppio inserimento), e soprattutto quell'operator o2 non viene aggiunto in nessun modo alla mappa. Io farei :

codice:
for (String s : operatorNames) {
	Operator o = elencoOperatori.get (s);
	if (o == null) elencoOperatori.put (s, new Operator (s));
	else o.setDestinazione(destinationName);
	d2.setOperatore(s);
}
Nel senso che se o non è null, non hai bisogno di creare un nuovo operatore, devi solo aggiungere la destinazione a quello già trovato!

Con questa modifica dovrebbe funzionare ...

A livello di design gli altri sapranno sicuramente dirti di più di me, da quel che vedo io ti consiglierei solo di usare i nomi dei metodi secondo le convenzioni: nel senso che chi legge setDestinazione si aspetta che tu, per quell'oggetto Operatore, vada in effetti a sovrascrivere una variabile destinazione (questo è il classico uso di un metodo set, al limite con un controllo che ti impedisca di impostare una certa destinazione a fronte di determinate esigenze).

Se invece tu vuoi aggiungere una nuova destinazione, chiama il metodo in modo diverso, addDestinazione sarebbe il nome più ovvio, non preoccuparti se esistono metodi con nomi simili, crei molta più confusione così.

E poi quel metodo e setOperatore passano in realtà delle stringhe, non gli oggetti corrispondenti, perché hai scelto questo approccio?
Potrebbe essere utile a una certa destinazione o a un certo operatore poter accedere ad altri campi che non siano il nome ...
Se il problema è che vuoi utilizzare il campo String come valore di chiave della mappa, e non ridefinire equals e hashcode per le classi da usare come chiave, magari dovresti cambiare il design delle classi (anche se ridefinire quei metodi può essere fatto automaticamente)...