Есть некая БД в которой лежат комнаты и мне надо выбрать комнаты подходящие по условиям фильтра. В классе Filter
поля по которым ведётся сравнение.
public static Collection findRooms(Filter filter)throws Exception{
if (filter == null)
throw new BadRequestException("This filter - " + filter + " does not exist." );
LinkedList<Room> foundRooms = new LinkedList<>();
for (Room room : gettingListObjectsFromFileRoomDB(readFromFile(utils.getPathRoomDB()))){
if (room.getNumberOfGuests() == filter.getNumberOfGuests() || filter.getNumberOfGuests() == 0 && room.getPrice() == filter.getPrice() || filter.getPrice() == 0){
if (room.getDateAvailableFrom().compareTo(filter.getDateAvailableFrom()) >= 0 || filter.getDateAvailableFrom() == null) {
if (room.isPetsAllowed() == filter.isPetsAllowed() && room.isBreakfastIncluded() == filter.isBreakfastIncluded()) {
if (room.getHotel().getCountry().equals(filter.getCountry()) || filter.getCountry() == null && room.getHotel().getCity().equals(filter.getCity()) || filter.getCity() == null) {
foundRooms.add(room);
}
}
}
}
}
return foundRooms;
}
Выборка по фильтру работает не корректно. Когда подставляю значение даты DateAvailableFrom
и буленовские значения PetsAllowed
и BreakfastIncluded
в фильтр, то по ним выборка идёт нормально. Но когда добавляю NumberOfGuests
то в результате поиска всё равно выдаются все комнаты, а не те в которых значение NumberOfGuests
равно значению указанному в фильтре. Когда добавляю в фильтр значения Price
, Country
, City
, то комнаты находятся правильно. Если ввожу Country
и City
, то находит комнаты из одной страны, но при этом не учитывает город, то есть выдаёт комнаты из всех городов. Если Country
ставлю значение null
, а City
значение города, то находит комнаты по заданному городу. Вот такие не стыковки.
Где у меня ошибка ? Долго уже сижу над этой проблемой и самому разобраться не получается. И ещё такой момент, когда в фильтре вместо даты ставлю null
, чтобы поиск не брал во внимание дату, то выскакивает ошибка:
Exception in thread "main" java.lang.NullPointerException
at java.util.Date.getMillisOf(Date.java:958)
at java.util.Date.compareTo(Date.java:978)
at dz_lesson35_36.dao.RoomDAO.findRooms(RoomDAO.java:66)
at dz_lesson35_36.demo.DemoRoom.main(DemoRoom.java:47)
Подскажите, как исправить мои недочёты ?
Расставь скобки
if ((room.getNumberOfGuests() == filter.getNumberOfGuests()) || (filter.getNumberOfGuests() == 0 && room.getPrice() == filter.getPrice() || filter.getPrice() == 0)){
Что касается null даты, то в фильтре сделай проверку типа
if(date != null){
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Возможно ли сделать так, чтобы ViewPager перелистывал фрагменты не свайпом по самим фрагментам, а свайпом по тулбару или какому-нибудь другому...
Хочу сделать свою реализацию календаря для проведения различных расчетов