У вас есть Optional<Item>
с именем item
, который содержит элемент, который пользователь хочет удалить (и может быть пустым Optional
, если search
не соответствует имени какого-либо элемента). Лучшее название для item
будет optionalItemToRemove
, чтобы пояснить, для чего он нужен.
У вас есть List<Item>
с именем items
, из которого вы хотите удалить item
.
Мы хотим сделать это только в том случае, если Optional фактически содержит элемент, поэтому мы можем сказать:
if (item.isPresent()) {
// remove the item
// because we know the item is present we can safely call item.get() to get the actual Item inside the Optional
}
Чтобы удалить элемент, мы можем использовать items.removeIf(...)
.
Аргумент для removeIf
- это Predicate<String>
. Это функция, которая вызывается один раз для каждого элемента в List
и возвращает true
, если этот элемент должен быть удален, и false
, если мы хотим его сохранить.
Мы хотим, чтобы удалите элемент, который хранится в Optional, поэтому нам нужно написать функцию, которая возвращает истину, если элемент, переданный ей, является элементом в Optional.
Подумайте и посмотрите, можете ли вы написать эту функцию , т.е.
items.removeIf(itemToCheck -> ...)
Там, где стоит многоточие, вам нужно выражение, которое проверяет, является ли itemToCheck тем элементом, который вы хотите удалить.
Сообщите нам, есть ли части этого ответа, которые вы не понимаете Не следую.
Попробуйте прочитать Javado c об используемых функциях и напишите несколько небольших тестовых программ, чтобы помочь вам понять, что они делают. Легче понять, как что-то работает в очень маленькой программе, чем пытаться использовать это в вашей более крупной программе, прежде чем вы полностью поймете, что она делает.