【问题标题】:Get most popular hotel room based on length of booking根据预订时长获取最受欢迎的酒店房间
【发布时间】:2020-03-24 15:49:15
【问题描述】:

我正在努力弄清楚如何退回最受欢迎的酒店房间。基本上我有一个预订对象的 ArrayList,其中包括从 csv 文件中读取的房间名称和预订长度。我需要弄清楚如何返回最受欢迎的房间,而我有 0 条线索。我需要以某种方式将每个房间的所有预订长度加起来。

this.roomName = roomName;
this.date = date;
this.time = time;
this.lengthOfBooking = lengthOfBooking;


 public String[] getMostPopularRooms(int n){
    String[] popularRooms = new String[n];

    return popularRooms;

 } 

【问题讨论】:

  • 也许你可以使用像地图这样的数据结构...类似地图 ...
  • 你用什么标准来衡量一个房间的受欢迎程度?
  • 哪个房间的预订时间最长
  • 所以您想将每个房间的预订天数相加,然后显示按预订总天数排序的房间列表 - 以降序排列?
  • 不,我只想总结预订日期或时间的长度,这并不重要,抱歉,我应该更具体一些。例如房间 1 有 2 个不同的预订 预订 1 的预订长度:是 10,预订 2:是 5 所以我想弄清楚如何总结每个房间的所有预订长度,然后按总预订长度排序

标签: java sorting arraylist


【解决方案1】:

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

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

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

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 2012-03-27
    • 2019-07-09
    • 2016-02-23
    • 2021-07-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多