java给对象按照字符串属性进行排序

"该博客演示了在Java中如何使用Collections.sort()方法结合Comparator接口或Lambda表达式,对包含JSONObject的List按"id"属性进行升序或降序排序。示例提供了三种不同的实现方式。"
摘要由CSDN通过智能技术生成

在java中对象进行排序,排序的属性是string,我们只需要实现Comparator接口,然后实现比较的方式。

public class StringSort {
    public static void main(String[] args) {

        test1();

    }

    // 方式1:
    public static void test1(){
        JSONObject jsonObject = JSONObject.parseObject("{\"result\":[{\"id\":\"A1001\",\"text\":\"程序员\"}, {\"id\":\"G1003\",\"text\":\"建筑师\"}, {\"id\":\"D1005\",\"text\":\"设计师\"}, {\"id\":\"G1009\",\"text\":\"自由职业\"}, {\"id\":\"E2007\",\"text\":\"学生\"}, {\"id\":\"C1009\",\"text\":\"教师\"}, {\"id\":\"A1002\",\"text\":\"医生\"}, {\"id\":\"B1005\",\"text\":\"律师\"}, {\"id\":\"F2009\",\"text\":\"架构师\"}]}");
        List<JSONObject> list = JSONArray.parseArray(jsonObject.getString("result"), JSONObject.class);

        list.forEach(System.out::println);

        Collections.sort(list, new Comparator<JSONObject>() {
            @Override
            public int compare(JSONObject o1, JSONObject o2) {
                 return  o1.getString("id").compareTo(o2.getString("id") ); // 升序排列
//                return  - o1.getString("id").compareTo(o2.getString("id") ); // 降序排列
            }
        });

        System.out.println("--------------排序后--------------------");

        list.forEach(System.out::println);
    }

    // 方式2:
    public  static void test2(){
        JSONObject jsonObject = JSONObject.parseObject("{\"result\":[{\"id\":\"A1001\",\"text\":\"程序员\"}, {\"id\":\"G1003\",\"text\":\"建筑师\"}, {\"id\":\"D1005\",\"text\":\"设计师\"}, {\"id\":\"G1009\",\"text\":\"自由职业\"}, {\"id\":\"E2007\",\"text\":\"学生\"}, {\"id\":\"C1009\",\"text\":\"教师\"}, {\"id\":\"A1002\",\"text\":\"医生\"}, {\"id\":\"B1005\",\"text\":\"律师\"}, {\"id\":\"F2009\",\"text\":\"架构师\"}]}");
        List<JSONObject> list = JSONArray.parseArray(jsonObject.getString("result"), JSONObject.class);

        list.forEach(System.out::println);

        Collections.sort(list, (o1, o2) -> {
            // return   o1.getString("id").compareTo(o2.getString("id") ); // 升序排列
            return  - o1.getString("id").compareTo(o2.getString("id") ); // 降序排列
        });

        System.out.println("--------------排序后--------------------");

        list.forEach(System.out::println);
    }

    // 方式3:
    public  static void test3(){
        JSONObject jsonObject = JSONObject.parseObject("{\"result\":[{\"id\":\"A1001\",\"text\":\"程序员\"}, {\"id\":\"G1003\",\"text\":\"建筑师\"}, {\"id\":\"D1005\",\"text\":\"设计师\"}, {\"id\":\"G1009\",\"text\":\"自由职业\"}, {\"id\":\"E2007\",\"text\":\"学生\"}, {\"id\":\"C1009\",\"text\":\"教师\"}, {\"id\":\"A1002\",\"text\":\"医生\"}, {\"id\":\"B1005\",\"text\":\"律师\"}, {\"id\":\"F2009\",\"text\":\"架构师\"}]}");
        List<JSONObject> list = JSONArray.parseArray(jsonObject.getString("result"), JSONObject.class);

        list.forEach(System.out::println);

        Collections.sort(list, Comparator.comparing(o -> o.getString("id")));

        System.out.println("--------------排序后--------------------");

        list.forEach(System.out::println);
    }


}
Java,我们可以使用Comparator接口来按照对象的多个属性进行排序。 首先,我们需要定义一个实现了Comparator接口的自定义比较。在该,我们可以重写compare方法,该方法用于比较两个对象的多个属性。 比如,假设我们有一个Person,其包含了name、age和salary三个属性。现在我们想要按照name属性进行排序,如果name相同的话,则按照age属性进行排序,最后再按照salary属性排序。 首先,我们定义一个PersonComparator实现Comparator接口: ``` public class PersonComparator implements Comparator<Person> { @Override public int compare(Person p1, Person p2) { int result = p1.getName().compareTo(p2.getName()); if (result == 0) { result = p1.getAge() - p2.getAge(); if (result == 0) { result = p1.getSalary() - p2.getSalary(); } } return result; } } ``` 接下来,我们可以使用该比较器来对Person对象进行排序。比如,我们创建了一个Person列表,其包含了多个Person对象,然后调用Collections的sort方法进行排序: ``` List<Person> personList = new ArrayList<>(); // 添加Person对象到列表 Collections.sort(personList, new PersonComparator()); ``` 这样,就可以按照name、age和salary属性的顺序对Person对象进行排序了。 需要注意的是,在compare方法,我们可以根据需要自定义比较的逻辑,比如可以使用compareTo方法来比较字符串属性,或者使用减法来比较数值属性。最后,将比较的结果返回即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值