Android List(集合)中的对象以某一个字段排序案例
在Android开发中,有时我们需要对一个对象的集合按照某一个字段进行排序,
Bean
publicclassStudent{
privateintstudentId;
privateStringstudentName;
privateintage;
publicStudent(intstudentId,StringstudentName,intage){
this.studentId=studentId;
this.studentName=studentName;
this.age=age;
}
publicintgetStudentId(){
returnstudentId;
}
publicvoidsetStudentId(intstudentId){
this.studentId=studentId;
}
publicStringgetStudentName(){
returnstudentName;
}
publicvoidsetStudentName(StringstudentName){
this.studentName=studentName;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
}
实现排序
实现排序比较类Comparator,里面实现排序规则。
publicclasstest{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Studentstu1=newStudent(1,"zhangsan",28);
Studentstu2=newStudent(2,"zhagnsan",19);
Studentstu3=newStudent(3,"wangwu",19);
Studentstu4=newStudent(4,"wangwu",19);
Studentstu5=newStudent(5,"zhaoliu",18);
ArrayListlist=newArrayList();
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.add(stu5);
//排序规则,这里是以年龄先排序,如果年龄相同
Comparatorcomparator=newComparator(){
publicintcompare(Students1,Students2){
//先排年龄
if(s1.getAge()!=s2.getAge()){
returns1.getAge()-s2.getAge();
}elseif(!s1.getStudentName().equals(s2.getStudentName())){
//年龄相同则按姓名排序
returns1.getStudentName().compareTo(s2.getStudentName());
}else{
//姓名也相同则按学号排序
returns1.getStudentId()-s2.getStudentId();
}
}
};
//这里就会自动根据规则进行排序
Collections.sort(list,comparator);
for(inti=0;i
排序结果
结果:
年龄:18姓名:zhaoliu学号:5
年龄:19姓名:wangwu学号:3
年龄:19姓名:wangwu学号:4
年龄:19姓名:zhagnsan学号:2
年龄:28姓名:zhangsan学号:1
也可以想下面这样写:
Collections.sort(list,newComparator(){
@Override
publicintcompare(GoodsBeanbean1,GoodsBeanbean2){
if(Integer.valueOf(bean1.getScore()).compareTo(Integer.valueOf(bean2.getScore()))==0){
returnInteger.valueOf(bean1.getRecommend_num()).compareTo(Integer.valueOf(bean2.getRecommend_num()));
}else{
returnInteger.valueOf(bean1.getScore()).compareTo(Integer.valueOf(bean2.getScore()));
}
}
});
这样就可以对一个集合中的数据各种排序了。
补充知识:java利用映射表名称反射创建实体类并赋属性值
1.hibernate中首先进行初始化,将对应的表名和类名以键值对的方式存放到map中
privateMapmappings;//全局变量
/**
*根据数据库表名获取实体类
*/
publicvoidinitMappings(){
if(mappings==null){
mappings=newHashMap();
SessionFactoryfactory=this.getSessionFactory();
MapmetaMap=factory.getAllClassMetadata();
for(Stringkey:(Set)metaMap.keySet()){
AbstractEntityPersisterclassMetadata=(AbstractEntityPersister)metaMap.get(key);
StringtableName=classMetadata.getTableName().toLowerCase();
intindex=tableName.indexOf(".");
if(index>=0){
tableName=tableName.substring(index+1);
}
StringclassName=classMetadata.getEntityMetamodel().getName();
mappings.put(tableName,className);
}
}
}
2.调用方法,传入表名得到对应的实体类名
publicStringgetEntityNameByTableName(StringtableName){
initMappings();
returnmappings.get(tableName);
}
3.根据实体类名创建实体类
/**
*listobj:要赋的属性值集合,顺序要和实体类属性顺序一致
*/
publicObjectgetByReflect(StringtableName,Listlistobj)throwsException{
Class>model=Class.forName(tableName);
Objectobject=newObject();
if(model!=null){
Field[]field=model.getDeclaredFields();
String[]modelName=newString[field.length];
String[]modelType=newString[field.length];
object=model.newInstance();
Methodm=null;
for(inti=1;i
以上这篇AndroidList(集合)中的对象以某一个字段排序案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。