Вы создаете класс Booking
, который содержит переменные-члены, такие как продолжительность пребывания. Подобно тому, что вы показываете в верхней части вашего примера кода. (Ваш getMostPopularRooms
метод не принадлежит этому классу. Он должен go в другом месте.)
Вы собираете Booking
объектов, очевидно считанных из CSV файл в соответствии с вашим вопросом. Каждая строка в CSV используется для создания одного Booking
объекта. Совет: используйте библиотеку, такую как Apache Commons CSV , чтобы облегчить задачу чтения файла CSV. Вы создадите List
или Set
из Booking
объектов.
Создайте Map
для хранения названий номеров, для каждого из которых вы будете хранить общее количество дней для всех объектов бронирования. , Возможно TreeMap
, чтобы держать номера комнат в порядке. Из вашего Вопроса я делаю вывод, что вы отслеживаете название каждой комнаты, используя String
.
Совет: Если бы вы добавили библиотеку ThreeTen-Extra в свой проект, вы могли бы использовать здесь тип Days
вместо Integer
. Для выполнения домашнего задания вместо реальной работы используйте Integer
.
Для эффективности вы можете установить начальную вместимость для известного количества комнат.
Map< String , Integer > roomPopularity = new TreeMap<>( numberOfRooms ) ;
Теперь l oop ваша коллекция Booking
объектов. Для каждого найдите соответствующий ключ в Map
. Если его еще нет, добавьте ключ к карте. Затем найдите объект Integer
для этой комнаты и добавьте к этому числу количество дней, указанное в бронировании.
Когда закончите, изучите значения карты, чтобы увидеть, какая комната забронирована больше всего. Этот вопрос может помочь (не уверен, не учился).
Все эти фрагменты много раз уже были рассмотрены в Переполнении стека. Чтобы узнать больше, поищите в существующих Вопросах и ответах.
Возможно, вы могли бы использовать потоки, чтобы получить хороший эффект здесь Но так как вы только начинаете с Java, используйте обычный синтаксис.
Возможно, ваш учитель намеревается использовать простые массивы, а не коллекции. Если это так, логи c похожи. Создайте пару массивов, один для имени комнаты и один для общего количества дней. Когда вы читаете каждый CSV, ищите имя комнаты в первом массиве. Если не найдено, добавьте номер. Затем посмотрите тот же номер строки во втором массиве, чтобы узнать общее количество дней. Добавьте количество дней во входящей строке к общему количеству дней. Когда закончите с CSV, l oop элементов массива общих дней, ища наибольшее число. Затем отскок от массива имен массивов, чтобы получить имя в соответствующей строке.