对 List<Map> 结构实现多字段排序

JAVA8 可以用 Lambda 表达式对 List 进行排序,但是只适用于List 中为实体类对象,比如List<Car>,其中Car为汽车类,这类型排序网上很多,一搜就能找到,就不说明了。

但是经常遇到 List<? extends Map> 类型的结构该如何排序呢?下面进入正题。

案例

在 List 中存入 Map,其中 Map 存入两个属性:roomNo(房间号)、time(时间)。

排序规则:先按照 roomNo 进行升序排列,如果 roomNo 一致再按照 time 降序排列。

下面是代码:

public static void main(String[] args) {
         
        // 生成待用数据
        List<Map<String, Object>> list = Lists.n
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设你有一个 `list<map>`,每个 map 包含多个字段,你想要根据某个字段排序并修改另一个字段的值,可以按照以下步骤进行: 1. 定义一个比较函数,用于比较两个 map 的大小,根据需要选择升序或降序排序。比如,如果你想根据字段 "score" 进行升序排序,可以这样定义比较函数: ```c++ bool compare(const map<string, int>& a, const map<string, int>& b) { return a.at("score") < b.at("score"); } ``` 2. 调用 `std::sort` 函数,将 list 按照指定的排序方式排序: ```c++ list<map<string, int>> mylist = ...; // 初始化 list mylist.sort(compare); // 按照 compare 函数进行排序 ``` 3. 遍历 list,修改指定字段的值。比如,如果你想将字段 "rank" 的值设置为每个 maplist 的位置加 1,可以这样遍历并修改: ```c++ int i = 1; for (auto& m : mylist) { m["rank"] = i++; } ``` 完整的代码示例: ```c++ #include <iostream> #include <list> #include <map> #include <algorithm> using namespace std; bool compare(const map<string, int>& a, const map<string, int>& b) { return a.at("score") < b.at("score"); } int main() { list<map<string, int>> mylist = { {{"name", "Alice"}, {"score", 90}}, {{"name", "Bob"}, {"score", 80}}, {{"name", "Charlie"}, {"score", 95}}, }; mylist.sort(compare); int i = 1; for (auto& m : mylist) { m["rank"] = i++; } for (auto& m : mylist) { cout << m.at("name") << " " << m.at("score") << " " << m.at("rank") << endl; } return 0; } ``` 输出: ``` Bob 80 3 Alice 90 2 Charlie 95 1 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值