Есть некая БД в которой лежат комнаты и мне надо выбрать комнаты подходящие по условиям фильтра. В классе 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){
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей