Если вам нужно удалить элементы на основе условия, если это не последний элемент в списке, который вы можете использовать removeIf()
, который:
Удаляет все элементы этой коллекции, которые удовлетворяют данному предикату.
Если данный предикат состоит в том, что элемент удовлетворяет условию. Однако сначала вам нужно убедиться, что не все элементы будут удалены с помощью removeIf()
(что приведет к удалению каждого элемента в списке). Вы можете использовать sublist()
, чтобы удалить все элементы, кроме последнего, если все будут удалены:
//If all the elements would be removed, use sublist to get every element but last one
//Clear sublist
if(items.stream().allMatch(e -> condition(e))) {
items.subList(0, items.size() -1).clear();
} else {
//else it is safe to directly call removeIf()
items.removeIf(e -> condition(e));
}
Или чтобы убедиться, что condition(e)
проверен только один раз, вы можете сделать:
items.subList(0, items.size() -1).removeIf(e -> condition(e));
if(items.size() > 1 && condition(items.get(items.size()-1))) {
items.remove(items.size()-1);
}
(спасибо @Holger за предложение)