List多字段升降序排序

2023-11-09

工具类

@Component
public class SortListUtil<E> {
     /**
     * 
     * @param list  需排序的集合
     * @param method 字段名称
     * @param sort 排序方式
     */
    public static void sort(List list, final String method, final String sort) {
        Collections.sort(list, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                int ret = 0;
                try {
                    //获取类本身的属性成员
                    Field f1 = o1.getClass().getDeclaredField(method);
                    f1.setAccessible(true);//跳过安全检查,因为属性是private修饰的
                    Object s = f1.get(o1);
                    Object s1 = f1.get(o2);
                    //需转换类型为原本类型,不能全部都用String类型比较
                    if ((f1.getType() == Integer.class) && (f1.getType() == Integer.class)) {
                        if (StringUtils.isNotEmpty(sort) && "desc".equals(sort)) {
                            ret = ((Integer) s1).compareTo(((Integer) s));
                        } else {
                            ret = ((Integer) s).compareTo(((Integer) s1));
                        }
                    }
                    //f1.getType() == String.class 和 s instanceof String 两种方式都可以
                    if ((s instanceof String) && (s1 instanceof String)) {
                        if (StringUtils.isNotEmpty(sort) && ERPService.DESC.equals(sort)) {
                            ret = s1.toString().compareTo(s.toString());
                        } else {
                            ret = s.toString().compareTo(s1.toString());
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return ret;
            }
        });
    }
}

测试

测试demo

public static void main(String[] args) {
        ArrayList<DataAnalysisVo> dataAnalysisVos = new ArrayList<>();
        dataAnalysisVos.add(new DataAnalysisVo().setSignedQuantity(100).setVolume(50).setSigningRate(0.20));
        dataAnalysisVos.add(new DataAnalysisVo().setSignedQuantity(100).setVolume(40).setSigningRate(0.25));
        dataAnalysisVos.add(new DataAnalysisVo().setSignedQuantity(100).setVolume(100).setSigningRate(1.00));
        dataAnalysisVos.add(new DataAnalysisVo().setSignedQuantity(90).setVolume(30).setSigningRate(0.30));
        SortListUtil.sort(dataAnalysisVos,"volume","desc");
        System.out.println(dataAnalysisVos.toString());

    }

测试结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6EfGyW1-1591610170175)(ceshi.png)]

测试类

/**
 * 数据分析单条数据
 */
@Data
@Accessors(chain = true)
@NoArgsConstructor
public class DataAnalysisVo {

    private String cityName;
    /**
     * 人员名称数量或名称
     */
    private String staffCount;
    /**
     * 签单量
     */
    private Integer signedQuantity;
    /**
     * 成交量
     */
    private Integer volume;

    /**
     * 签单率
     */
    private Double signingRate;

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

List多字段升降序排序 的相关文章

随机推荐

  • Git官网下载太慢,解决方案

  • 银行客户流失分析预测

    客户流失意味着客户终止了和银行的各项业务 毫无疑问 一定量的客户流失会给银行带来巨大损失 考虑到避免一位客户流失的成本很可能远低于挖掘一位新客户 因此对客户流失情况的分析预测至关重要 本文分析了某银行10000条客户信息 含14个字段 接下
  • 1X1卷积的作用,以及pytorch代码实现简单程序

    解释 从从某种程度来讲用1 1卷积并不是是网络变得更深 而是更宽 这里的宽实际上是增加数据量 但是通过1 1的卷积我们就可以对原始图片做一个变换 得到一张新的图片 从而可以提高泛化的能力减小过拟合 同时在这个过程中根据所选用的1 1卷积和f
  • MapBox根据鼠标位置显示经纬度组件

    只需要将map实例传进来就可以了 可以通过props 也可以通过vuex pinia等 原理就是监听mousemove事件 将经纬度取出来就可以 完整组件如下
  • Vue 中 v-if 用于判断某个变量是否在列表中

    本人使用的方法是 list列表的includes函数 判断name变量是否包含中 name1 name2 name3 中 是可以跑通的 v if name1 name2 name3 includes name 查了网上还有一种方式 v if
  • VUE框架中同意使用cookie弹框,第一次进入网站展示,点击同意后不再显示

    需求 全幅横栏 点击确认后隐藏 文案 我们想使用cookie以便更好了解您对本网站的使用情况 这将有助于改善您今后访问本网站的体验 关于cookie的使用 以及如何撤回或管理您的同意 请详见我们的隐私政策 如您点击右侧确认按钮 将视为您同意
  • onclick事件在苹果手机上失效

    项目在开发阶段 在我本地电脑上点击是可以实现页面跳转的 但是部署到服务器上用手机访问时发现页面不动 后来发现在电脑上以及在安卓手机上都是可以点击实现正常跳转的 只有苹果手机上不行 解决 经过查找资料才知道 苹果有这么个设置 对于点击的对象
  • Android开发之多级下拉列表菜单实现(仿美团,淘宝等)

    注 本文转载于 http blog csdn net minimicall article details 39484493 下载地址 http download csdn net detail minimicall 7956483 我们在
  • [架构之路-191]-《软考-系统分析师》-8-软件工程 - 解答什么是面向功能的结构化程序设计:算法+数据结构 = 程序

    目录 1 什么是结构化程序设计 2 结构化程序设计的局限性 3 程序设计的三种基本结构 1 顺序结构 2 选择结构 3 循环结构 1 什么是结构化程序设计 功能 Function 函数 算法 数据流Data Flow 数据结构Data St
  • 数学建模-用scipy库的odeint函数实现微分方程的数值解法

    introduction python对于常微分方程的数值求解是基于一阶方程进行的 高阶微分方程必须化成一阶方程组 通常采用龙格 库塔方法 scipy integrate模块的odeint模块的odeint函数求常微分方程的数值解 其基本调
  • 为啥 IDEA 不推荐使用 @Autowired 注解?

    因公众号更改推送规则 请点 在看 并加 星标 第一时间获取精彩技术分享 点击关注 互联网架构师公众号 领取架构师全套资料 都在这里 0 2T架构师学习资料干货分 上一篇 2T架构师学习资料干货分享 大家好 我是互联网架构师 大家在使用IDE
  • Java中的while循环

    Java中的while循环和do while循环 开发工具与关键技术 Java 作者 黄瑞杰 撰写时间 2022 11 18 while循环 while是最基本的循环 1 格式 只要布尔表达式为 true 循环就会一直执行下去 练习1 打印
  • python统计正数负数的个数

    方法一 encoding utf 8 original list 1 3 5 7 0 1 9 4 5 8 positive list negative list for i in original list if i gt 0 positi
  • linux里面touch 和 mkdir

    一 touch命令 touch命令有两个作用 一个是创建新的空文件 二是用于把已存在的文件的时间标签更新为系统当前的时间 默认方式 它们的数据将原封不动地保留下来 语法 touch options filename a 改变访问时间 m 改
  • 竞品还在追赶 OpenAI用GPT-4飚赢自己

    赶在百度 文心一言 发布前一天 OpenAI祭出了GPT 4 这对于百度 谷歌们来说 可能是一个重大打击 人们已经领略过GPT 3 5加持下的ChatGPT 但GPT 4比 前辈 更强大 它具有更高的可靠性和准确性 能够读懂图片 甚至还能角
  • Android平滑移动——Scroller类研究,太厉害了

    2 computeScrollOffset 方法 public boolean computeScrollOffset if mFinished return false int timePassed int AnimationUtils
  • 入门Python数据分析最好的实战项目 分析篇

    目的 本篇给大家介绍一个数据分析的初级项目 目的是通过项目了解如何使用Python进行简单的数据分析 数据源 博主通过爬虫采集的链家全网北京二手房数据 文末 可获取 数据初探 首先导入要使用的科学计算包numpy pandas 可视化mat
  • 云计算学习总结

    云计算总结 理论汇总 与saas不同 基于平台服务的云计算形式把开发环境或者运行平台也作为一种服务给用户提供 云计算是对并行计算 网格计算 分布式计算技术的发展与运用 Amazon com公司通过EC2计算云 可以让客户通过webservi
  • WPF 折线图

    一 折线图 一 安装和查看值 1 需要联网安装 通过Nuget安装LiveCharts 搜索安装 2 想查看需要使用的值 点击对象管理器 查LiveCharts Wpf Series 里面有需要用的值 安装完成的效果 二 视图代码
  • List多字段升降序排序

    工具类 Component public class SortListUtil