java - 根据预订时长获取最受欢迎的酒店房间
问题描述
我正在努力弄清楚如何退回最受欢迎的酒店房间。基本上,我有一个预订对象的 ArrayList,其中包括从 csv 文件中读取的房间名称和预订长度。我需要弄清楚如何返回最受欢迎的房间,而我没有线索该怎么做。我需要以某种方式将每个房间的所有单独的预订长度加起来。
this.roomName = roomName;
this.date = date;
this.time = time;
this.lengthOfBooking = lengthOfBooking;
public String[] getMostPopularRooms(int n){
String[] popularRooms = new String[n];
return popularRooms;
}
解决方案
您创建了一个Booking
包含成员变量的类,例如逗留时间。类似于您在代码示例顶部显示的内容。(你的getMostPopularRooms
方法不属于这个类。它应该去其他地方。)
您收集对象,显然是根据您的问题从CSVBooking
文件中读取的。CSV 中的每一行用于生成一个对象。提示:使用诸如Apache Commons CSV之类的库来协助阅读 CSV 文件。您将产生一个或多个对象。Booking
List
Set
Booking
实例化 aMap
以保存房间名称,您将为每个房间名称存储所有预订对象的总天数。可能TreeMap
是为了保持房间名称的顺序。从您的问题中,我推断您正在使用 跟踪每个房间名称String
。
提示:如果要将 ThreeTen-Extra库添加到项目中,可以Days
在此处使用 type 而不是Integer
. 对于您的家庭作业而不是实际工作,请使用Integer
.
为了提高效率,您可以将初始容量设置为已知的房间数。
Map< String , Integer > roomPopularity = new TreeMap<>( numberOfRooms ) ;
现在循环您的Booking
对象集合。对于每一个,在Map
. 如果尚不存在,请将键添加到映射。然后检索该Integer
房间的对象,并将该预订的天数添加到该数字中。
完成后,检查地图的值以查看预订最多的房间。这个问题可能会有所帮助(不确定,没有研究)。
所有这些部分已经在 Stack Overflow 上多次介绍过。要了解更多信息,请搜索现有的问题和答案。
您可能可以在这里使用流来获得良好的效果。但由于您刚开始使用 Java,请使用常规语法。
您的老师可能打算让您使用简单的数组而不是集合。如果是这样,逻辑是相似的。创建一对数组,一个用于房间名称,一个用于总天数。在阅读每个 CSV 文件时,在第一个数组中查找房间名称。如果没有找到,添加房间。然后在第二个数组中查看相同的行号,以获得总天数。将传入行的天数添加到总天数。完成 CSV 后,循环总天数数组的元素,寻找最大的数字。然后反弹到数组名称数组以检索匹配行中的名称。
推荐阅读
- excel - 如何从我的 =Count 公式中排除 0 个值?
- php - 未找到 Laravel 播种机
- python - 如何从特定的 pdf 页面而不是整个文档访问文本
- dask-distributed - 无法使用 Python 3.7 运行 dask-mpi -- 将客户端连接到 dask-mpi 调度程序时超时
- reactjs - 在查询组件之外显示 Apollo 客户端查询加载的最佳实践?
- javascript - javascript - 在搜索中隐藏表格单元格
- html - 响应式设计的 HTML/CSS 居中问题
- java - 如何实现以下所需的Hashmap
- python - 如何将原始散列输入获取到 RSA 数字签名?
- java - Cucumber+TestNG+Cucable 插件:如何将我在@beforemethod 实例中创建的appium 驱动程序实例传递给页面对象?