最近在学习java,目前看到java如何对一个对象列表进行排序。
我有一个Member类:
public Member(String name,Calendar birthday,Sex gender,String emailaddress) { this.name=name; this.birthday=birthday; this.emailaddress=emailaddress; this.gender=gender; } public Member() { } public int getAge() { Calendar calendar= Calendar.getInstance(); Integer age=calendar.get(Calendar.YEAR)-birthday.get(Calendar.YEAR); if(calendar.get(Calendar.MONTH)>birthday.get(Calendar.MONTH)) { age+=1; } return age; }
现在要对几个member根据Age来排序,java里我现在学的做法是继承compatator的接口,写一个比较器之类的东西,然后通过Array.sort(list,cmp)来比较。
Member[] members=membergroup.toArray(new Member[membergroup.size()]); for(Member member:members) { member.printMember(); } class MemberAgeComparator implements Comparator<Member> { public int compare(Member member1,Member member2) { //compareTo,两个对象属性之间的比较,返回负数,0和正数 return member1.getBirthday().compareTo(member2.getBirthday()); } } Arrays.sort(members,new MemberAgeComparator());
因为自己对python稍微熟悉一点,就想python是不是也是可以类似的方法进行排序,其实都是一样,通过sort()根据自定义的比较器来比较.
#-*-coding:utf-8 ''' 属性排序 ''' class Member(object): def __init__(self,age): self.age=age def getAge(self): return self.age def printAge(self): print self.age if __name__=="__main__": member1=Member(17) member2=Member(14) membergroup=[member1,member2] for member in membergroup: member.printAge() print membergroup membergroup.sort(cmp=lambda x,y:cmp(x.getAge(),y.getAge()),reverse=True) for member in membergroup: member.printAge()
唯一要我觉得麻烦就是,如果是逆序输出的话,python可以直接有一个参数reverse来表示正序还是逆序,但是java的好像没有这个参数。
通过Collectons.reverse(List<?>)
ArrayList<Member> membergroup=new ArrayList<>(); Collections.reverse(membergroup);