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

这篇具有很好参考价值的文章主要介绍了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()等其它方法。文章来源地址https://www.toymoban.com/news/detail-609956.html

到了这里,关于Java lamda对List<JSONObject>里多个动态属性字段进行动态的降序或者升序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中List对象集合按照对象中某字段进行排序

    在Java中,可以使用List集合对象的sort(Comparator? super E c)方法,按照对象中某字段对List集合进行排序 栗子: 打印输出结果如下:

    2024年02月12日
    浏览(56)
  • java List<对象> 根据对象的一个属性进行去重

    1.实现一个自定义函数,该函数将用于确定两个对象是否相等,例如: 这个函数接受一个Function对象作为参数,该函数将从对象中提取唯一标识属性,并使用ConcurrentHashMap来确定是否已经处理过该属性值。   2.现在你可以使用这个函数来进行去重了,例如:  这个代码将对m

    2024年02月12日
    浏览(56)
  • Java当中List集合根据对象某个属性进行去重

    关于以下方法,直接可以在自己项目创建一个类,然后进行测试使用,去重方式有很多种,文本末尾也提供了每个方法的运行结果,供大家参考使用! 文章大量使用到了Java8当中的Lambda表达式,以及stream流相关基础知识。如果您用的不熟,没关系,可以直接复制下面的方案然

    2024年02月16日
    浏览(64)
  • Java8 List<Object> 转成 List<JSONObject>

       Java8 List<Object> 转成 List<Map<String, Object>>

    2024年02月16日
    浏览(40)
  • Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等

    博客背景是Java开发。json相关的转换、取值等在日常开发中经常使用,但有时候还是会忘记or遇到些奇奇怪怪的问题。以此记录,提醒自己~不定期更新~ 实体类和JSONObject互转 Map和JSONObject互转 String转JSONObject 实体类转JSON字符串时不过滤NULL空值 获取JSONObject中的key value List和

    2024年02月12日
    浏览(81)
  • Java中通过List中的stream流去匹配相同的字段去赋值,避免for循环去查询数据库进行赋值操作

    Q :上面两个列表怎么使用流,根据equipmentDeviceMessageInfo中的phone字段去匹配userList 中的phone字段再获取userList 中是name赋值给equipmentDeviceMessageInfo 中的name。 A :以前的写法是通过for循环遍历一个一个去查询赋值,这样的话如果数据多的话一个一个遍历会查询的话肯定是很慢的,

    2024年02月07日
    浏览(48)
  • <List<Map<String,Object>>>Map中多个属性转成List Map

    举例: 原始数据 :{001=张三, 002=李四, 003=王五, 004=赵六} 目标数据 : {value=张三, key=001} {value=李四, key=002} {value=王五, key=003} {value=赵六, key=004} 输出: 单独封装工具类案例:

    2024年02月11日
    浏览(44)
  • Coalesce:处理Null值,返回传入的多个字段(属性)中第一个非空的值

    Coalesce函数是SQL中的一个函数,用于返回参数列表中第一个非空的表达式的值。Coalesce函数接受两个或多个参数,它会按顺序依次检查每个参数,返回第一个非空的参数值。如果所有参数都为空,则返回NULL。 Coalesce函数可以用于在SQL中处理空值的情况。在实际的数据处理中,

    2024年02月09日
    浏览(46)
  • jsonobject转list(jsonobject转list集合)

    您好,这个应该是可以的!   get(“two”); System。out。println(“two = ” + n); 由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相

    2023年04月08日
    浏览(37)
  • 【MySQL】根据多个字段查询数据进行去重的sql编写

    一、实现思路 根据四个字段进行数据去重的SQL编写可以使用GROUP BY和HAVING子句来实现。 场景一: 假设有一个名为 table1 的数据表,其中包含四个字段: field1 、 field2 、 field3 和 field4 。要求根据这四个字段进行数据去重。 可以使用以下SQL语句: 场景二: 上述SQL语句会返回所

    2024年02月15日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包