list<Pserson>按age排序

本文提供了一个使用Java进行数组排序的具体示例。示例中创建了一个Person类,并使用ArrayList存储Person对象。通过自定义比较器Mycomparator实现了按年龄排序的功能。
常常遇到数组排序的问题.比如我有一个Person类,它的实例对象存储在ArrayList数组中,现在要把ArrayList数组中的Person对象按照年龄排序.
其实这种情况经常遇到.
下面给出源代码:

1:Person.java文件:-------------------------------
public class Person{
String name;
int age;

public Person(String name,int age){
this.name = name;
this.age = age;

}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}


2:Mycomparator.java-------------------------------
//实现Comparator接口,也就是定义排序规则,你几乎可以定义任何规则
package com.infoearth;
import java.util.*;
public class Mycomparator implements Comparator{

public int compare(Object o1,Object o2) {
Person p1=(Person)o1;
Person p2=(Person)o2;
if(p1.age<p2.age)
return 1;
else
return 0;
}

}

3:ListSort.java------------------------------------

package com.infoearth;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class ListSort {
public static void main(String[] args){
ArrayList list = new ArrayList();
list.add(new Person("lcl",28));
list.add(new Person("fx",23));
list.add(new Person("wqx",29));
Comparator comp = new Mycomparator();
Collections.sort(list,comp);
for(int i = 0;i<list.size();i++){
Person p = (Person)list.get(i);
System.out.println(p.getName());
}

}

}

特此存档,也希望对兄弟们有帮助.
Java中对 `List<JSONObject>` 按照两个条件进行排序,可以通过自定义 `Comparator` 来实现多字段排序。这种排序方式允许先根据一个字段进行比较,如果该字段值相同,则根据第二个字段进行进一步比较。 以下是一个具体的实现示例,假设需要按照字段 `name` 和 `age` 进行排序,其中 `name` 为第一排序条件,`age` 为第二排序条件: ```java import java.util.*; import java.util.stream.Collectors; public class MultiFieldSort { public static void main(String[] args) { List<JSONObject> jsonList = new ArrayList<>(); // 假设 JSONObject 是一个支持 getString 和 getInteger 方法的 jsonList.add(new JSONObject(Map.of("name", "张三", "age", 25))); jsonList.add(new JSONObject(Map.of("name", "李四", "age", 22))); jsonList.add(new JSONObject(Map.of("name", "张三", "age", 20))); jsonList.add(new JSONObject(Map.of("name", "王五", "age", 30))); // 创建自定义的 Comparator Comparator<JSONObject> comparator = (json1, json2) -> { String name1 = json1.getString("name"); String name2 = json2.getString("name"); int nameComparison = name1.compareTo(name2); if (nameComparison != 0) { return nameComparison; } // 如果 name 相同,则比较 age int age1 = json1.getInt("age"); int age2 = json2.getInt("age"); return Integer.compare(age1, age2); }; // 使用 stream 进行排序 List<JSONObject> sortedList = jsonList.stream() .sorted(comparator) .collect(Collectors.toList()); // 输出排序后的结果 sortedList.forEach(System.out::println); } } ``` ### 实现说明 1. **Comparator 实现多字段排序**:通过 Lambda 表达式定义了一个 `Comparator`,首先比较 `name` 字段,如果两个对象的 `name` 相同,则继续比较 `age` 字段。 2. **使用 Stream API 进行排序**:通过 `stream().sorted(comparator)` 对原始列表进行排序,并将结果收集到新的列表中。 3. **排序顺序控制**:可以对字段的排序顺序进行调整,例如如果希望 `age` 按降序排序,可以在 `Integer.compare(age1, age2)` 后调用 `.reversed()` 方法。 ### 支持中文排序的扩展 如果需要对中文字段(如 `name`)进行排序,并希望按照中文的拼音顺序排序,可以引入 `Collator` 来实现更符合中文习惯的排序规则: ```java Comparator<JSONObject> chineseNameComparator = (json1, json2) -> { String name1 = json1.getString("name"); String name2 = json2.getString("name"); Collator collator = Collator.getInstance(Locale.CHINA); int nameComparison = collator.compare(name1, name2); if (nameComparison != 0) { return nameComparison; } int age1 = json1.getInt("age"); int age2 = json2.getInt("age"); return Integer.compare(age1, age2); }; ``` 通过这种方式,可以实现对 `List<JSONObject>` 的多条件排序,并且支持中文字段的拼音排序。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值