湘潭网站建设 水平磐石网络,北京网站建设公司报价,提供网站建设服务的网站,宣传片拍摄设备清单最近做到一个需求#xff0c;需要把业务侧返回的数据#xff08;格式为ListJSONObject#xff09;,然后根据前端传来的排序字段、以及升降序属性来排序并返回给前端。要对ListJSONObject中的多个属性字段进行动态的升序或降序排序#xff0c;我们可以根据需… 最近做到一个需求需要把业务侧返回的数据格式为ListJSONObject,然后根据前端传来的排序字段、以及升降序属性来排序并返回给前端。要对ListJSONObject中的多个属性字段进行动态的升序或降序排序我们可以根据需要使用Comparator.comparing()方法和Comparator.reverseOrder()方法运用lambda表达式动态指定属性字段和排序顺序。以下是自己写的一个示例代码演示了如何实现动态的降序和升序排序仅供参考。
public static void main(String[] args) {ListJSONObject 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);ListString sortProperties new ArrayList();//动态指定要排序的属性字段//此处可以根据业务需要传具体字段此处测试就先写死sortProperties.add(name);sortProperties.add(age);MapString,Boolean sortOrders new HashMap();//动态指定属性字段对应的排序顺序true表示降序false表示升序//此处可以根据业务传具体字段的具体排序方式此处测试就先写死sortOrders.put(name,false);sortOrders.put(age,true);// 构建Comparator链ComparatorJSONObject comparator null;for (int i 0; i sortProperties.size(); i) {final int propertyIndex i;ComparatorJSONObject 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()等其它方法。