Java lamda对List<JSONObject>里多个动态属性字段进行动态的降序或者升序

        最近做到一个需求,需要把业务侧返回的数据(格式为List<JSONObject>),然后根据前端传来的排序字段、以及升降序属性来排序并返回给前端。要对List<JSONObject>中的多个属性字段进行动态的升序或降序排序,我们可以根据需要使用Comparator.comparing()方法和Comparator.reverseOrder()方法,运用lambda表达式动态指定属性字段和排序顺序。以下是自己写的一个示例代码,演示了如何实现动态的降序和升序排序,仅供参考。     

public static void main(String[] args) {List<JSONObject> jsonList = new ArrayList<>();// 添加JSONObject对象到List中JSONObject json1 = new JSONObject();json1.put("id", 1);json1.put("name", "Alice");json1.put("age", 25);JSONObject json2 = new JSONObject();json2.put("id", 2);json2.put("name", "Alice");json2.put("age", 30);JSONObject json3 = new JSONObject();json3.put("id", 3);json3.put("name", "Bob");json3.put("age", 20);jsonList.add(json1);jsonList.add(json2);jsonList.add(json3);List<String> sortProperties = new ArrayList<>();//动态指定要排序的属性字段//此处可以根据业务需要传具体字段,此处测试就先写死sortProperties.add("name");sortProperties.add("age");Map<String,Boolean> sortOrders = new HashMap<>();//动态指定属性字段对应的排序顺序(true表示降序,false表示升序)//此处可以根据业务传具体字段的具体排序方式,此处测试就先写死sortOrders.put("name",false);sortOrders.put("age",true);// 构建Comparator链Comparator<JSONObject> comparator = null;for (int i = 0; i < sortProperties.size(); i++) {final int propertyIndex = i;Comparator<JSONObject> propertyComparator = Comparator.comparing((JSONObject o) -> o.getString(sortProperties.get(propertyIndex)),String.CASE_INSENSITIVE_ORDER);if (sortOrders.get(sortProperties.get(propertyIndex))) {propertyComparator = propertyComparator.reversed();}if (comparator == null) {comparator = propertyComparator;} else {comparator = comparator.thenComparing(propertyComparator);}}Collections.sort(jsonList, comparator);// 输出排序后的结果for (JSONObject json : jsonList) {System.out.println(json.toString());}}

按名字升序,按年龄降序

输出结果:

{"name":"Alice","id":2,"age":30}
{"name":"Alice","id":1,"age":25}
{"name":"Bob","id":3,"age":20}

在上述代码中,首先创建了一个包含多个JSONObject对象的List。然后,使用sortProperties来动态指定要排序的属性字段,使用sortOrders来动态指定属性字段对应的排序顺序。

在使用for循环遍历sortProperties列表中的属性字段,并根据属性字段在列表中的索引创建一个新的Comparator。在Lambda表达式中,通过o.get(sortProperties.get(propertyIndex))来获取属性字段的值。根据sortOrders列表中的值,如果需要降序排序则使用.reversed()方法进行反转。

通过循环构建的多个Comparator通过thenComparing方法链将它们连接在一起,生成一个能够实现多个属性字段动态排序的Comparator。

注意:上述代码中假设属性字段具有相同的类型。如果属性字段有不同的数据类型,可能需要使用适当的比较器来提取和比较属性字段的值,即要注意从jsonObject中取对应值的时候,是使用getString()还是getInteger()等其它方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7.28黄金还会继续下跌吗?收官多空如何布局

近期有哪些消息面影响黄金走势&#xff1f;黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a; 周五&#xff08;7月28日&#xff09;亚洲时段&#xff0c;现货黄金震荡微涨&#xff0c;目前交投于1952.94附近&#xff0c;隔夜金价大跌后&#xff0c;吸引了一些逢低…

【深入了解pytorch】PyTorch循环神经网络(RNN)

【深入了解pytorch】PyTorch循环神经网络(RNN) PyTorch循环神经网络(RNN):概念、工作原理与常见变体循环神经网络概念和工作原理RNN的结构RNN的工作原理LSTM(长短期记忆网络)LSTM的结构LSTM的工作原理GRU(门控循环单元)GRU的结构GRU的工作原理在PyTorch中实现RNN、LST…

HTML 速查列表

HTML 速查列表 HTML 速查列表. 你可以打印它&#xff0c;以备日常使用。 HTML 基本文档 <!DOCTYPE html> <html> <head> <title>文档标题</title> </head> <body> 可见文本... </body> </html> 基本标签&#xff08;Ba…

使用python将PDF转word

实现功能&#xff0c;将程序所在当前路径下的所有PDF文件转化为word import os from pdf2docx import Converter# 获取当前路径 current_path os.getcwd()# 遍历当前路径下的所有文件和文件夹 for file_name in os.listdir(current_path):# 检查文件是否为 PDF 文件if file_n…

[SQL挖掘机] - 全连接: full join

介绍: 在sql中&#xff0c;join是将多个表中的数据按照一定条件进行关联的操作。全连接&#xff08;full join&#xff09;是一种连接类型&#xff0c;它会返回所有满足连接条件的行&#xff0c;同时还包括那些在左表和右表中没有匹配行的数据。 在进行全连接时&#xff0c;会…

Kotlin Multiplatform 使用测试单元

编写常见的测试代码 现在您有了一个基于字符串的 API&#xff0c;可以通过它进行基本的测试。 1、在公共的测试模块中创建一个 org.jetbrains.base64 包 2、在新包下面创建 Base64Test.kt文件 3、在文件中添加代码 package org.jetbrains.base64import com.example.myapplicat…

医学案例|配对wilcoxon符号秩检验

一、案例介绍 某单位想要研究某保健品对小鼠是否具有抗疲劳作用&#xff0c;将同种属的小鼠按性别与年龄相同、体重相近配成对子&#xff0c;共14对&#xff0c;并将每对中的两只小鼠随机分配到两个不同的保健食品剂量组&#xff0c;测量小鼠负重5&#xff05;体重时的游泳时间…

git 合并非关联分支

面对的场景&#xff1a;现在有三个仓库&#xff0c;一个是本地的仓库1&#xff0c;第二个是和仓库1关联的在github上的仓库2&#xff0c;第三个是把仓库1拷贝到一个无网络环境中持续开发一段时间的仓库3. 分析 基本想法是把仓库3作为仓库1的远程仓库&#xff0c;然后在仓库1上…

uiautomatorViewer无法获取Android8.0手机屏幕截图的解决方案

问题描述&#xff1a; 做APP UI自动化的时候&#xff0c;会碰到用uiautomatorViewer在Android 8.0及以上版本的手机上&#xff0c;无法获取到手机屏幕截图&#xff0c;无法获取元素定位信息的问题&#xff0c;会有以下的报 在低版本的Android手机上&#xff0c;则没有这个问题…

Istio网关Gateway 启用TLS

Istio网关Gateway概述 Istio网关Gateway是一个负责处理南北向流量的组件&#xff0c;它通常会暴露服务网格内部的服务&#xff0c;以便外部的请求能够访问到服务网格中的服务。Istio网关Gateway支持多种协议&#xff0c;包括HTTP、HTTPS和GRPC等。 在Istio网关Gateway中&#…

二、Java框架基础02 XML

二、XML 2.1 XML 简介 XML 即可扩展标记语言&#xff0c;一种简单的数据存储语言&#xff0c;使用一系列简单的标记来描述结构化数据 XML 的特点 XML 与操作系统&#xff0c;编程语言的开发平台无关规范统一&#xff0c;实现不同系统之间的数据交互 2.1.1 XML 的文档结构 以下…

防火墙的ALG、NAT、双机热备知识点详解

具体的NAT和双机热备实验请到&#xff1a;NAT与双机热备实验 目录 1、ALG 2、NAT ALG 3、NAT域间双向转换 4、NAT域内双向转换 5、双出口NAT 6、防火墙的双机热备 解决方案1&#xff1a;VGMP 6.1 双机热备份技术产生的背景&#xff1a; 6.2 VRRP在多区域防火墙组网中的…

吐血整理,性能测试最重要指标分析说明,一步通关...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 QPS Queries Per …

swiper不生效/切换不生效,点击切换按钮activeIndex值不对应问题@令狐张豪

原因&#xff1a;因为把new Swiper放在mounted实例化的时候可能v-for并未执行完成结构还未完全生成 错误&#xff1a;先执行了swiper实例化后循环的&#xff1b;正确&#xff1a;先循环完数据确保数据完整循环完成后再执行swiper实例化&#xff1b; 解决方案&#xff1a;watch…

SketchUp 如何选择合适的硬件配置?

SketchUp 本地配置不足可以尝试云端解决方案&#xff1a; 渲云渲染插件 渲云云渲染面向多领域三维内容制作提供云渲染服务&#xff0c;帮助用户快速完成三维内容、动画及效果图的渲染计算&#xff0c;规避因本地电脑配置不足导致渲染慢的问题&#xff0c;大幅提高工作效率&…

注解和反射03--Class对象

注解和反射 Class类Class类的常用方法获取Class类的实例哪些类型可以有Class对象 Class类 在Object类重定义了以下的方法&#xff0c;此方法将被所有子类继承 public final Class getClass()以上的方法返回值的类型是一个Class类&#xff0c;此类是Java反射的源头&#xff0c…

一百三十七、Hive——HQL运行报错(持续更新中)

一、timestamp字段与int字段相加 &#xff08;一&#xff09;场景 change_time字段是timestamp字段&#xff0c;代表一个红绿灯周期的开始时间&#xff08;先是绿灯、再是黄灯、最后红灯&#xff09;&#xff0c;而green是int字段&#xff0c;代表绿灯的秒数&#xff0c;现在…

EPPlus与Microsoft.Office.Interop.Excel的使用区别

文章目录 代码的使用区别EPPlus的工作原理Microsoft.Office.Interop.Excel的使用原理代码的使用区别 static void ExportToExcel(List<(string, double, double)> list, string outputFilePath){//Microsoft.Office.Interop.Excel的使用 /* Excel.Application excelAp…

Docker 阿里云容器镜像服务

阿里云-容器镜像服务ACR 将本地/服务器docker image&#xff08;镜像&#xff09;推送到 阿里云容器镜像服务仓库 1. 在容器镜像服务ACR中创建个人实例 2. 进入个人实例 > 命名空间 创建命名空间 3. 进入个人实例 > 镜像仓库 创建镜像仓库 4. 进入镜像仓库 > 基本信…

论文笔记--Distilling the Knowledge in a Neural Network

论文笔记--Distilling the Knowledge in a Neural Network 1. 文章简介2. 文章概括3 文章重点技术3.1 Soft Target3.2 蒸馏Distillation 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Distilling the Knowledge in a Neural Network作者&#xff1a;Hinton, Geoffre…