public String[] getTopRoomsBooked(int n) {
HashMap<String, Integer> rooms = new HashMap<String, Integer>();
rooms.put("Gower", 281);
rooms.put("Usk", 291);
rooms.put("Wye", 283);
rooms.put("Bala", 282);
rooms.put("Pen y Fan", 292);
rooms.put("Llangorse", 290);
rooms.put("Snowdon", 288);
rooms.put("Taff", 296);
rooms.put("Cadair Idris", 292);
for (String i : rooms.keySet()) {
System.out.println("Room name: " + i + " Amount of time: " + rooms.get(i));
}
System.out.println();
List<Integer> timeBooked = new ArrayList<>(rooms.values());
Collections.sort(timeBooked, Collections.reverseOrder());
if (n == 1) {
System.out.println("RoomName : Taff " + timeBooked.get(n - 1));
} else if (n == 3) {
System.out.println("1: Taff " + timeBooked.get(n - 3));
System.out.println("2: Cadiar Idris " + timeBooked.get(n - 2));
System.out.println("3: Pen y Fan " + timeBooked.get(n - 1));
} else if (n == 5) {
System.out.println("1: Taff " + timeBooked.get(n - 5));
System.out.println("2: Cadair Idris " + timeBooked.get(n - 4));
System.out.println("3: Pen y Fan " + timeBooked.get(n - 3));
System.out.println("4: Usk " + timeBooked.get(n - 2));
System.out.println("5: Llangorse " + timeBooked.get(n - 1));
} else if (n == 9) {
System.out.println("1: Taff " + timeBooked.get(n - 9));
System.out.println("2: Cadair Idris " + timeBooked.get(n - 8));
System.out.println("3: Pen y Fan " + timeBooked.get(n - 7));
System.out.println("4: Usk " + timeBooked.get(n - 6));
System.out.println("5: Llangorse " + timeBooked.get(n - 5));
System.out.println("6: Snowden " + timeBooked.get(n - 4));
System.out.println("7: Wye " + timeBooked.get(n - 3));
System.out.println("8: Bala " + timeBooked.get(n - 2));
System.out.println("9: Gower " + timeBooked.get(n - 1));
}
return null;
}
可以使用以下功能使用Java 8流来实现这一点:
Comparator.comparing(...).thenComparing()
Map.Entry<String, Integer>
limit
重新映射到房间名称(键hashmap中的键)
map
将房间名称收集到字符串阵列
rooms
hashmap是在方法之外填充的,并作为参数提供,让我们将其重写如下:collect(Collectors.toList()).toArray(String[]::new)
测试和输出
rooms
在线演示