- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 LinkedHashMap,其中包含 String 键(酒店房间名称)和总预订长度的值 Integer 的键值对。我的方法应该返回由总预订长度确定的顶级酒店房间,采用 int 作为参数,确定返回的 String 数组的长度。我正在尝试将 LinkedHashMap 转换为字符串并将其添加到我的字符串数组中。我尝试了几种不同的方法(这些方法已被注释掉),我遇到的问题是当我使用 for 循环遍历 HashMap 并将其添加到我的数组字符串时,它无法正确循环,并且当我运行方法它只返回同一个酒店房间
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;
}
最佳答案
我建议检查 CSVReader。您可能会从那里得到一些错误的数据。
但是您的整个功能可以通过使用 Java 8 Streams 和 Collectors 用 1-2 行代码完成。 .
示例
Map<String, Integer> roomnameAndBookingLengthSum = bookings.stream()
.collect(
Collectors.groupingBy(
Booking::getRoomName,
Collectors.summingInt(Booking::getBookingLength)
)
);
然后你可以用你的函数对其进行排序,我稍微调整了一下。您首先对流进行排序,然后再次对每个流进行排序。对流进行排序后,所有后续操作都将保持该排序。
所以我只是将排序后的流从Entry
映射到String
。这会产生一个 roomNames 列表(按 bookingLength ASC 排序)
// currently the List is sorted in ASCENDING order like 1,3,4,6,7,8...
List<String> hotelRoomNamesOrderedByBookingLength = roomnameAndBookingLengthSum.entrySet().stream()
.sorted(Map.Entry.comparingByValue()).map(e -> e.getKey()).collect(Collectors.toList());
然后您只需将其颠倒过来,即可首先预订预订长度最长的房间。
// reverse it
Collections.reverse(hotelRoomNamesOrderedByBookingLength);
<小时/>
输入
List<Booking> bookings = new ArrayList<>();
bookings.add(new Booking("Room#1", 1));
bookings.add(new Booking("Room#2", 3));
bookings.add(new Booking("Room#3", 5));
bookings.add(new Booking("Room#2", 3));
bookings.add(new Booking("Room#1", 8));
bookings.add(new Booking("Room#3", 34));
bookings.add(new Booking("Room#1", 8));
输出
Room#2
Room#1
Room#3
关于java - 将 LinkedHashMap 转换为字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60856792/
我是一名 Java 新手,在概念化如何解决尝试创建表示某些分层数据的 LinkedHashMap 的问题时遇到问题。 这是我目前所知的。在此示例中,我有一个 LinkedHashMap,它显示了展平的
我有 LinkedHashMap 列表,如何不可分割地访问每个 LinkedHashMap。 List> listOfRecords 我想要 List abc= new listOsRecords.1
我有一个 LinkedHashMap,其中包含另一个 LinkedHashMap,如下所示: LinkedHashMap> containerMap = new LinkedHashMap>(); 我
我有 2 个 LinkedHashMap, LinkedHashMap, Color> map; LinkedHashMap, Color> totalMap; 两者是相同的,但 map 已通过使用撤
我有一个 map 列表,我需要单独使用其中的每张 map 以用于进一步的目的。这是我正在使用的代码片段 for(int i = 0; i ()); } int j=0; whi
我有一个扩展 LinkedHashMap 的类 (EntireFile)。我尝试转换: EntireFile old = (EntireFile) functionReturningLinkedHas
我有一个构建 LinkedHashMap 的方法,这样我就可以保持顺序。这是我的方法: public class MyClass { public Map buildMap() {
我是 Scala 的新手。我一直在尝试将 java LinkedHashMap 转换为 Scala 中的等效集合(LinkedHashMap?)以保留插入顺序。 尝试按照其他线程中的建议进行操作,但似
我有一个LinkedHashMap看起来像这样(真的不知道如何说明 HashMap): { "10/10/2010 10:10:10" => "SomeText1", "10/10/2019
我被包裹了LinkedHashMap>进入列表; List>> list = new ArrayList(mainCodesMap.entrySet()); 哪个mainCodeMap是 Map> 的
我有两个链接的 HashMap (key - String, value = String[]),它们在两个链接的 HashMap 中具有相同的大小和相同的键,我希望能够根据键,验证一个链接 Hash
假设我有以下数据结构: LinkedHashMap> foodFamilies = new LinkedHashMap<>(); 看起来像这样: {Fruit = [{Name = Apple,
如何对 LinkedHashMap 的 Arraylist 进行排序 前任。 ArrayList> list = new ArrayList>(); LinkedHashMap lin
LinkedHashMap lHashMap = new LinkedHashMap(); lHashMap.put("One", new Integer(1)); lHashMap.
关闭。这个问题需要details or clarity .它目前不接受答案。 想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题. 8年前关闭。 Improve thi
我有一个简单的问题来找到数组 A 中的第一个唯一元素。但是,令我困扰的是使用不同方法的时间复杂度。到目前为止,我已经尝试过这两种方法。 第一种方法: LinkedHashMap> map = new
这个问题已经有答案了: How do I compare strings in Java? (23 个回答) 已关闭 4 年前。 我正在尝试将一对放入 linkedhashmap 中,但是当我放入 2
我需要用Java实现很久以前在Delphi中实现的代码,我尝试使用LinkedHashMap(在Delphi中使用TStringlist),因为我需要在插入元素时获取元素的索引,问题是是它不起作用..
在正确实现 hashCode 和 equals() 的情况下,以下代码会返回 false? myLinkedHashMap.containsKey(myLinkedHashMap.keySet().i
我让 XStream 使用此 xml 为我构建链接 HashMap : #!/masterofsoundtrack/broadcast #!/masterofsoun
我是一名优秀的程序员,十分优秀!