zoukankan      html  css  js  c++  java
  • java和python根据对象某一个属性排序

    最近在学习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);
    就算不在校园,也要保持饥渴,学到老,活到老嘛 我是一个小QA,我为自己代言!!!!!!!!!!!!!
  • 相关阅读:
    看net2.0头晕眼花,是不是该做个具体的程序呢
    安装SQLServer2000时,提示"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机"
    刚装的WIN7,用了一下午,记一下备忘
    不同系统开启和关闭fso的方法(转)
    希腊字母以及发音
    meta 标签的作用
    电信禁止路由上网的最佳破解方法(转)
    安装系统
    网络工程师笔记
    GHOST操作
  • 原文地址:https://www.cnblogs.com/xiamuyouren/p/3273283.html
Copyright © 2011-2022 走看看