Делаю реализацию магазина цветов. Есть склад - List plantStorage, в котором хранятся цветы - объекты Plant с полями: name, color, length, freshness, price. Неодходимо реализовать поиск в PlantStorage цветка plantToSearch по заданым пользователем полям. Причем, пользователь может не указывать все поля для поиска, а указать только несколько, какие ему нужно. Например name и color, а остальные условия поиска будут null. В этом случае необходимо сделать список цветов, которые подходят по параметрам поиска.
Была идея сделать так:
List<Plant> foundFlowers = new LinkedList<>();
for (Plant plant : plantStorage) {
if (((plantToCompare.getColor() != null && plantToCompare.getColor().equals(plant.getColor())) &&
(plantToCompare.getName() != null && plantToCompare.getName().equals(plant.getName())) &&
(plantToCompare.getLength() != null && plantToCompare.getLength() == ((Flower) plant).getLength()) &&
(plantToCompare.getFreshness() != null && plantToCompare.getFreshness() == plant.getFreshness()) &&
(plantToCompare.getPrice() != null && plantToCompare.getPrice() == plant.getPrice()))) {
foundFlowers.add(plant);
}
}
}
но это не работает... Помогите, пожалуйста.
В данный момент у тебя выполниться поиск, если только введены все условия, поскольку везде стоят &&
.
Вначале необходимо проверить, какие строки не null
, а после уже по ним производить поиск.
Есть следующий вариант. Вначале надо ещё проверку что все поля у сравниваемого не null.
boolean found=true;
if (plantToCompare.getColor() != null) {
if (!(plantToCompare.getColor().equals(plant.getColor())))
found=false;
}
.....повторяем для каждого поля....
if (found==true) foundFlowers.add(plant);
у plantToCompare задайте начальные значения всех параметров. Допустим для color = "null" именно текстом (чтобы не ловить NPE), для цифровых значений -1.
А дальше использовать лямбды
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Здраствуйте! Подскажите как в javaFX сделать обработку нажатия(type) клавиши, те