Помогите разобраться с фильтром

228
16 января 2018, 12:50

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

Подскажите, как исправить мои недочёты ?

Answer 1

Расставь скобки

if ((room.getNumberOfGuests() == filter.getNumberOfGuests()) || (filter.getNumberOfGuests() == 0 && room.getPrice() == filter.getPrice() || filter.getPrice() == 0)){

Что касается null даты, то в фильтре сделай проверку типа

if(date != null){
}
READ ALSO
Кастомизация view pager

Кастомизация view pager

Возможно ли сделать так, чтобы ViewPager перелистывал фрагменты не свайпом по самим фрагментам, а свайпом по тулбару или какому-нибудь другому...

207
Собственная реализация календаря

Собственная реализация календаря

Хочу сделать свою реализацию календаря для проведения различных расчетов

207
ScaleTransition и setOnMouseEntered

ScaleTransition и setOnMouseEntered

Добрый деньПроблема вот какая

135