You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按Room类的price属性对Java的Hotel对象列表排序?

按Room的price属性排序Hotel列表的解决方案

嗨,这个需求很常见!不过得先明确一点:一个酒店可能有多个可用房间,你是想按房间的最低价格、最高价格还是平均价格来排序酒店呢?我给你列几种常见的实现方式,你可以根据实际需求选择。

首先,假设你的Room类有一个getPrice()方法来获取价格(毕竟你提到了price属性,我默认它有对应的getter):

public class Room {
    private double price;
    // 构造器、其他属性...
    public double getPrice() {
        return price;
    }
}

接下来分情况给出代码:

1. 按酒店可用房间的最低价格排序

这种情况会把拥有最便宜房间的酒店排在前面,如果酒店没有可用房间,我们可以默认给一个极高的价格让它排到最后(或者你可以根据需求调整默认值):

// 使用Collections.sort()直接修改原列表
Collections.sort(hotelList, Comparator.comparingDouble(hotel -> 
    hotel.getAvailableRooms().stream()
        .mapToDouble(Room::getPrice)
        .min()
        .orElse(Double.MAX_VALUE) // 无可用房间时默认最大值,排到最后
));

// 或者用Stream API生成新的排序后的列表(不修改原列表)
List<Hotel> sortedByLowestPrice = hotelList.stream()
    .sorted(Comparator.comparingDouble(hotel -> 
        hotel.getAvailableRooms().stream()
            .mapToDouble(Room::getPrice)
            .min()
            .orElse(Double.MAX_VALUE)
    ))
    .collect(Collectors.toList());

2. 按酒店可用房间的最高价格排序

逻辑和上面类似,只是把min()换成max():

Collections.sort(hotelList, Comparator.comparingDouble(hotel -> 
    hotel.getAvailableRooms().stream()
        .mapToDouble(Room::getPrice)
        .max()
        .orElse(Double.MIN_VALUE) // 无可用房间时默认最小值,排到最前
));

3. 按酒店可用房间的平均价格排序

如果需要按平均价格排序,可以这样实现:

Collections.sort(hotelList, Comparator.comparingDouble(hotel -> 
    hotel.getAvailableRooms().stream()
        .mapToDouble(Room::getPrice)
        .average()
        .orElse(Double.MAX_VALUE) // 无可用房间时默认最大值,排到最后
));

额外提示

  • 如果你的排序需要倒序,只需要在Comparator后面加上.reversed()即可,比如:
    Collections.sort(hotelList, Comparator.comparingDouble(...).reversed());
    
  • 记得处理getAvailableRooms()返回null的情况!如果有可能返回null,可以在流操作前加个判断,比如:
    (hotel.getAvailableRooms() == null ? Stream.empty() : hotel.getAvailableRooms().stream())
        .mapToDouble(Room::getPrice)
        .min()
        .orElse(Double.MAX_VALUE)
    

内容的提问来源于stack exchange,提问作者Vlad Dănilă

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:44:02