Я не думаю, что это произойдет только один раз в жизни вашего приложения.
Итак, я бы передал другому объекту ответственность за поддержание ссылки на объекты, добавленные на эту карту.
Так что в следующий раз, когда вам нужно будет удалить его, вы используете эту «обратную карту» ...
class MapHolder {
private Map<String, DomainObj> originalMap;
private Map<DomainObj,String> reverseMap;
public void remove( DomainObj value ) {
if ( reverseMap.contains( value ) ) {
originalMap.remove( reverseMap.get( value ) );
reverseMap.remove( value );
}
}
}
Это намного быстрее, чем итерация.
Очевидно, вам нужно синхронизировать их. Но это не должно быть так сложно, если вы изменяете код, чтобы один объект отвечал за состояние карты.
Помните, что в ООП у нас есть объекты, которые имеют состояние и поведение. Если ваши данные передают переменные повсеместно, вы создаете ненужные зависимости между объектами
Да, вам потребуется некоторое время, чтобы исправить код, но время, потраченное на его исправление, избавит вас от многих головных болей в будущем. Думаю об этом.