for ( Order o : theorder ) {
if ( o.getOrderID() == orderIDSearch ) {
theorder.remove(orderIDSearch);
System.out.println("Order has been successfully removed");
continue;
} else {
System.out.println("Not found ");
break;
}
}
Здесь есть несколько проблем:
Во-первых, удаление элемента коллекции во время итерации по коллекции требует другой техники, чем вы используете. Как правило, изменение коллекции во время итерации приводит к ConcurrentModificationException
.
Во-вторых, ожидаются ли множественные совпадения? Если найдено не более одного совпадения, continue
должно быть break
.
В-третьих, можно ожидать, что код продолжит работу со следующими элементами, если текущий элемент не совпадает. То есть break
должен быть continue
, или, что еще лучше, должен быть полностью удален.
В-четвертых, неясно, что theorder.remove(orderIDSearch)
будет делать что-либо, если тип коллекции не имеет remove
операция, которая принимает значение ключа вместо значения элемента. Для базовых типов коллекций (List
, Set
) вызов ничего не сделает.
Вот два переписывания:
Если итератор поддерживает удаление:
Iterator<Order> orders = theorder.iterator();
boolean found = false;
while ( !found && orders.hasNext() ) {
if ( orders.next().getOrderID() == orderIDSearch ) {
found = true;
}
}
if ( found ) {
orders.remove();
System.out.println("Found and removed [ " + orderIDSearch + " ]");
} else {
System.out.println("Not found [ " + orderIDSearch + " ]");
}
Если итератор не поддерживает удаление, то:
boolean found = false;
for ( Order o : theorder ) {
if ( o.getOrderID() == orderIDSearch ) {
found = true;
break;
}
}
if ( found ) {
theorder.remove(orderIDSearch);
System.out.println("Found and removed [ " + orderIDSearch + " ]");
} else {
System.out.println("Not found [ " + orderIDSearch + " ]");
}
Обратите внимание, что это зависит от remove
принятия ключа в качестве значения параметра.