Очевидным решением было бы изменить порядок циклов.Пусть внешний цикл повторяется по элементам Map
, а внутренний цикл повторяется по массиву.Во внутреннем цикле установите для некоторого флага значение true, когда ваш currentPartOfWeek.matches(entry.getValue())
в первый раз равен false
(или true
, из вашего вопроса было непонятно, когда вы хотите удалить запись), и удаляйте эту запись, только еслиэтот флаг имеет значение true.
Таким образом, вы можете выполнить итерацию только один раз над Map
.
. В основном это будет выглядеть так:
Iterator<Map.Entry<Object,String>> iter = objects.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<Object,String> entry = iter.next();
boolean remove = false;
for(Calendar range: clientTimeRange) {
if (someCondition) {
if (remove) {
iter.remove();
} else {
remove = true;
}
}
}
}
Обратите внимание, что это зависитналичие двух элементов в вашем массиве clientTimeRange
.Если имеется больше элементов, вам следует соответствующим образом изменить логику (т.е. решить, когда вы хотите удалить запись - после того, как два элемента массива соответствуют текущей записи карты? После того, как все элементы массива совпадут с текущей записью?).