对Stu数组进行排序, 先按age升序,若age一样时,则按name升序;若age和Name都一样,则按id升序.学会了这个,降序也很简单,只需要加上reversed()即可。
下面代码的核心是
Comparator<Stu> comByAge=Comparator.comparing(Stu::getAge);
Comparator<Stu> comById = Comparator.comparing(Stu::getId);
Comparator<Stu> comByName= Comparator.comparing(Stu::getName);
其余都是为了生成随机测试数据。
package yuanma.listT;
import java.util.Arrays;
import java.util.Comparator;
/**
* @author wbj
* @create 2022-11-09 8:58
*/
public class ComparatorTest {
public static class Stu{
private String name;
private int id;
private int age;
public Stu(String name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", id=" + id +
", age=" + age +
'}';
}
}
public static void print(Stu[] stus){
for (Stu stu : stus) {
System.out.println(stu+" ");
}
System.out.println();
}
//测试用。生成随机的数组。长度是随机的、各字段也是随机的。name只是简单的随机
public static Stu[] getRandomSuts(int MaxLen,int MaxIdVal,int MaxAgeVal){
int length = (int)(Math.random()*(MaxLen+1));
Stu[] stus = new Stu[length];
for (int i = 0; i < length; i++) {
Stu s = new Stu(getRandomString(5),(int)(Math.random()*(MaxIdVal+1)),(int)(Math.random()*(MaxAgeVal+1)));
stus[i] = s;
}
return stus;
}
//测试用。length用户要求产生字符串的长度。生成随机字符串。
public static String getRandomString(int length){
String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
StringBuffer sb=new StringBuffer();
for(int i=0;i<length;i++){
//int number=random.nextInt(62);
int number = (int)(Math.random()*62);
sb.append(str.charAt(number));
}
return sb.toString();
}
//测试
public static void main(String[] args) {
//因为不是ArrayList,所以,得用Arrays工具类
//先按age升序,若age一样时,则按name升序;若age和Name都一样,则按id升序。
Comparator<Stu> comByAge=Comparator.comparing(Stu::getAge);//getAge换成getName就是按name升序。
Comparator<Stu> comById = Comparator.comparing(Stu::getId);
Comparator<Stu> comByName= Comparator.comparing(Stu::getName);
int MaxLen = 100;
int MaxIdVal = 100;
int MaxAgeVal = 100;
Stu[] stus = getRandomSuts(MaxLen, MaxIdVal, MaxAgeVal);
print(stus);
System.out.println("=========排序后========");
Arrays.sort(stus,comByAge.thenComparing(comByName).thenComparing(comById));
print(stus);
//补充:Comparator.comparing(Stu::getId).reversed()就是按id降序排。
}
}
如果使用的是ArrayList,则
ArrayList<Stu> stus1 = new ArrayList<>();
.......
//ArrayList里填完测试数据后
stus1.sort(comById.thenComparing(comByName).thenComparing(comById));
> 因为测试数据都是随机的,所以,可以复制后自己去运行一下。