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); //排序规则,这里是以年龄先排序,如果年龄相同 Comparator comparator=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。