【发布时间】:2020-03-25 20:19:43
【问题描述】:
我有一个 String 键(酒店房间名称)的键值对的 LinkedHashMap 和总预订长度的值 Integer。我的方法应该返回由总预订长度确定的顶级酒店房间,将 int 作为参数,确定返回的字符串数组的长度。我正在尝试将我的 LinkedHashMap 转换为 String 并将其添加到我的 String 数组中。我尝试了几种不同的方法(这些方法已被注释掉),我遇到的问题是当我使用 for 循环遍历哈希图并将其添加到我的数组字符串中时,它不能正确循环并且当我运行方法它只是返回同一个酒店房间
Room name = Taff Total time booked = 296
Room name = Taff Total time booked = 296
Room name = Taff Total time booked = 296
我的方法在这里:
public String[] getTopRoomsBooked(int n){
List<Booking> bookings = CSVReader();
String[] rooms = new String[n];
// int[] timedBooked = new int[n];
LinkedHashMap<String, Integer> roomsMap = new LinkedHashMap<String, Integer>();
LinkedHashMap<String, Integer> roomsMapSorted = new LinkedHashMap<String, Integer>();
for(Booking booking: bookings) {
int timeBooked = booking.getBookingLength();
String roomName = booking.getRoomName();
int totalTime = timeBooked;
if(roomsMap.get(roomName)!= null) {
totalTime += roomsMap.get(roomName);
}
roomsMap.put(roomName, totalTime);
}
roomsMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue())
.forEachOrdered(x -> roomsMapSorted.put(x.getKey(), x.getValue()));
// for(int i = 0; i < n; i++) {
// for(Map.Entry<String, Integer> entry : roomsMapSorted.entrySet()) {
// rooms[i] = ("Room name = " + entry.getKey() + " Total time booked = " + entry.getValue());
// }
// }
// int i = 0;
// for(String key: roomsMapSorted.keySet()) {
// rooms[i] = ("Room name = " + roomsMapSorted.get(key) + " Total time booked = " + roomsMapSorted.getValue());
// i++;
// }
for(int i = 0; i < n; i++) {
Iterator entries = roomsMapSorted.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
String key = (String)entry.getKey();
Integer value = (Integer)entry.getValue();
rooms[i] = ("Room name = " + entry.getKey() + " Total time booked = " + entry.getValue());
}
}
return rooms;
}
【问题讨论】:
标签: java