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

如何按指定taxCodes列表顺序对List<Managers>集合进行排序

Java 按指定税务编号顺序排序Managers列表实现方案

核心思路:先构建税务编号到排序权重的映射,税务编号在taxCodes列表中位置越靠前,权重值越小,排序优先级越高。

前置条件

确认Managers类已提供taxCode属性的公共Getter方法:public String getTaxCode()

方案1:生成新的排序后列表(不修改原managers集合,Java 8+适用)

提前将taxCodes转成Map映射提升排序性能,避免每次比较都遍历taxCodes列表:

import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

// 构建taxCode到索引的映射,索引越小排序越靠前
Map<String, Integer> taxCodeOrderMap = IntStream.range(0, taxCodes.size())
    .boxed()
    .collect(Collectors.toMap(
        taxCodes::get,
        i -> i,
        // 若taxCodes存在重复值,保留首次出现的索引
        (oldVal, newVal) -> oldVal
    ));

// 排序生成新列表
List<Managers> sortedManagers = managers.stream()
    // 可选:过滤掉taxCode不在taxCodes列表里的元素
    // .filter(manager -> taxCodeOrderMap.containsKey(manager.getTaxCode()))
    .sorted(Comparator.comparingInt(manager -> 
        // 不在taxCodes列表里的元素默认排在末尾,可根据业务需求调整默认值
        taxCodeOrderMap.getOrDefault(manager.getTaxCode(), Integer.MAX_VALUE)
    ))
    .collect(Collectors.toList());

方案2:原地排序(直接修改原managers集合的顺序)

Map<String, Integer> taxCodeOrderMap = IntStream.range(0, taxCodes.size())
    .boxed()
    .collect(Collectors.toMap(
        taxCodes::get,
        i -> i,
        (oldVal, newVal) -> oldVal
    ));

managers.sort(Comparator.comparingInt(manager -> 
    taxCodeOrderMap.getOrDefault(manager.getTaxCode(), Integer.MAX_VALUE)
));

性能说明

如果直接在排序规则中调用taxCodes.indexOf(manager.getTaxCode()),每次比较都要遍历一次taxCodes列表,整体时间复杂度为O(n * m * logn)(n为managers长度,m为taxCodes长度);提前转成Map映射后时间复杂度降到O(n + m + n logn),数据量越大性能优势越明显。

内容的提问来源于stack exchange,提问作者Sam Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:18:03