当前位置: 首页 > news >正文

java根据集合中对象的属性值大小生成排名

 1:根据对象属性降序排列

  public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {
        LinkedHashMap<T, Integer> rankingMap = new LinkedHashMap<>();
        List<T> distinctKeys = dataList.stream()
                .map(keyExtractor)
                .distinct()
                .sorted(Comparator.reverseOrder())
                .collect(Collectors.toList());
        for (int i = 0; i < distinctKeys.size(); i++) {
            rankingMap.put(distinctKeys.get(i), i + 1);
        }
        return rankingMap;
    }

2:根据对象属性升序排列
 

public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {
        LinkedHashMap<T, Integer> rankingMap = new LinkedHashMap<>();
        List<T> distinctKeys = dataList.stream()
                .map(keyExtractor)
                .distinct()
                .sorted()
                .collect(Collectors.toList());
        for (int i = 0; i < distinctKeys.size(); i++) {
            rankingMap.put(distinctKeys.get(i), i + 1);
        }
        return rankingMap;
    }

 3:方法调用

LinkedHashMap<BigDecimal, Integer> rankingMap = EntityConvertUtil.calculateRanking(returnDataList, ProductPerformanceInfoVO::getSalesVolume);

4:说明

方法添加泛型约束 <T extends Comparable<? super T>>,确保 T 可以进行自然排序(如 Integer, String 等)。如果 T 是自定义类型且未实现 Comparable,则需提供显式 Comparator;

5:示例场景:

假设 keyExtractor 提取的是 Integer 类型的值,原始数据为 [3, 1, 4, 1, 5]

  • 升序:排序后的键为 [1, 3, 4, 5],排名为 {1=1, 3=2, 4=3, 5=4}
  • 降序:排序后的键为 [5, 4, 3, 1],排名为 {5=1, 4=2, 3=3, 1=4}
http://www.dtcms.com/a/107265.html

相关文章:

  • [NOIP 1999 提高组] 导弹拦截
  • C++ STL简单的几个容器
  • I²C总线高级特性与故障处理分析
  • 【leetcode100】每日温度
  • OpenCV 从入门到精通(day_04)
  • 面向对象
  • python实现简单fast-cgi服务,对接到nginx
  • 蓝桥云客 刷题统计
  • 持续集成与Jenkins安装使用教程
  • 分布式锁方案-Redisson
  • Linux命令-tar
  • 使用 MapReduce 进行高效数据清洗:从理论到实践
  • Linux内核中ARP协议的实现与dev_addr字段的作用
  • LabVIEW 调用 Python 函数
  • SAP-ABAP:ABAP `LEAVE LIST-PROCESSING` 深度解析
  • 天梯赛 L2-023 图着色问题
  • ai prompt工程师认证
  • AT_abc306_b [ABC306B] Base 2
  • 【工具变量】全国分省低空经济高质量发展数据(2012-2023年)
  • Word 插入无页眉页码的空白页(即插入奇数页)
  • WebSocket connection failed 解决
  • 基于机器学习的三国时期诸葛亮北伐失败因素量化分析
  • 数学知识集锦
  • Ubuntu24.04-中文输入法的切换
  • 批量将文本文件转换为 Word/PDF/Excel/图片等其它格式
  • python-leetcode 64.在排序数组中查找元素的第一个和最后一个位置
  • c语言大小端判断
  • 【JavaScript】十三、事件监听与事件类型
  • 95. 费解的开关
  • 密码学基础——古典密码学