一个List相对另一个List进行排序

这段代码展示了如何使用Collections.sort方法对一个OvermindFieldConfig对象列表进行排序,排序依据是另一个包含字段名的字符串列表orderRegulation。通过比较orderRegulation中元素的索引,实现了目标列表的定制排序。如果在orderRegulation中找不到对象的字段名,则将其位置设为目标列表的末尾。
  
  private void setListOrder(List<String> orderRegulation, List<OvermindFieldConfig> targetList) {
        //按照字段名来排序
        Collections.sort(targetList, ((o1, o2) -> {
            int io1 = orderRegulation.indexOf(o1.getName());
            int io2 = orderRegulation.indexOf(o2.getName());

            if (io1 != -1) {
                io1 = targetList.size() - io1;
            }
            if (io2 != -1) {
                io2 = targetList.size() - io2;
            }

            return io2 - io1;
        }));
    }

### JavaScript 中基于多个字段对列表进行排序JavaScript 中,可以利用 `Array.prototype.sort()` 方法实现基于多个字段的复杂排序。以下是具体的实现方案: #### 多字段排序原理 `sort()` 方法允许自定义比较函数 `(a, b)` 来决定数组元素之间的相对顺序。对于多字段排序,可以通过逐步比较不同字段值的方式实现优先级控制。如果前一字段相等,则继续比较下一字段。 #### 实现代码 以下是一个通用的多字段排序函数,支持升序 (`asc`) 或降序 (`desc`) 排序: ```javascript function sortByMultipleFields(list, sortCriteria) { return list.sort((a, b) => { for (let criterion of sortCriteria) { let fieldA = a[criterion.field]; let fieldB = b[criterion.field]; if (criterion.type === 'number') { fieldA = parseFloat(fieldA); fieldB = parseFloat(fieldB); } if (fieldA < fieldB) { return criterion.order === 'asc' ? -1 : 1; } if (fieldA > fieldB) { return criterion.order === 'asc' ? 1 : -1; } } return 0; }); } ``` 此函数接收两个参数: - `list`: 待排序的对象数组。 - `sortCriteria`: 描述排序规则的数组,其中每个元素包含三个属性: - `field`: 字段名。 - `order`: 排序方向(`asc` 表示升序,`desc` 表示降序)。 - `type`: 数据类型(可选,默认为字符串;若为数值型则设为 `'number'`)。[^4] #### 使用示例 假设有如下数据集: ```javascript const dataList = [ { name: "Alice", age: 25, score: 87 }, { name: "Bob", age: 30, score: 92 }, { name: "Charlie", age: 20, score: 87 }, { name: "David", age: 25, score: 95 } ]; ``` 我们需要先按 `score` 升序排列,再按 `age` 降序排列: ```javascript const sortedData = sortByMultipleFields(dataList, [ { field: 'score', order: 'asc', type: 'number' }, { field: 'age', order: 'desc', type: 'number' } ]); console.log(sortedData); /* 输出结果: [ { name: "Charlie", age: 20, score: 87 }, { name: "Alice", age: 25, score: 87 }, { name: "Bob", age: 30, score: 92 }, { name: "David", age: 25, score: 95 } ] */ ``` #### 解析过程 1. 首先依据 `score` 进行升序排序,得到 `[Charlie(87), Alice(87), Bob(92), David(95)]`。 2. 对于相同分数的情况(如 Charlie 和 Alice),进一步按照 `age` 降序排序,最终形成上述结果。[^5] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值