首页 > 解决方案 > 根据预订时长获取最受欢迎的酒店房间

问题描述

我正在努力弄清楚如何退回最受欢迎的酒店房间。基本上,我有一个预订对象的 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;

 } 

标签: javasortingarraylist

解决方案


您创建了一个Booking包含成员变量的类,例如逗留时间。类似于您在代码示例顶部显示的内容。(你的getMostPopularRooms方法不属于这个类。它应该去其他地方。)

您收集对象,显然是根据您的问题从CSVBooking文件中读取的。CSV 中的每一行用于生成一个对象。提示:使用诸如Apache Commons CSV之类的库来协助阅读 CSV 文件。您将产生一个或多个对象。BookingListSetBooking

实例化 aMap以保存房间名称,您将为每个房间名称存储所有预订对象的总天数。可能TreeMap是为了保持房间名称的顺序。从您的问题中,我推断您正在使用 跟踪每个房间名称String

提示:如果要将 ThreeTen-Extra库添加到项目中,可以Days在此处使用 type 而不是Integer. 对于您的家庭作业而不是实际工作,请使用Integer.

为了提高效率,您可以将初始容量设置为已知的房间数。

Map< String , Integer > roomPopularity = new TreeMap<>( numberOfRooms ) ;

现在循环您的Booking对象集合。对于每一个,在Map. 如果尚不存在,请将键添加到映射。然后检索该Integer房间的对象,并将该预订的天数添加到该数字中。

完成后,检查地图的值以查看预订最多的房间。这个问题可能会有所帮助(不确定,没有研究)。

所有这些部分已经在 Stack Overflow 上多次介绍过。要了解更多信息,请搜索现有的问题和答案。

您可能可以在这里使用流来获得良好的效果。但由于您刚开始使用 Java,请使用常规语法。

您的老师可能打算让您使用简单的数组而不是集合。如果是这样,逻辑是相似的。创建一对数组,一个用于房间名称,一个用于总天数。在阅读每个 CSV 文件时,在第一个数组中查找房间名称。如果没有找到,添加房间。然后在第二个数组中查看相同的行号,以获得总天数。将传入行的天数添加到总天数。完成 CSV 后,循环总天数数组的元素,寻找最大的数字。然后反弹到数组名称数组以检索匹配行中的名称。


推荐阅读