• 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,我为自己代言!!!!!!!!!!!!!
  • 相关阅读:
    【洛谷P2921】[USACO08DEC]在农场万圣节Trick or Treat on the Farm
    【洛谷P3659】[USACO17FEB]Why Did the Cow Cross the Road I G
    【洛谷P3385】【模板】负环
    Typora+PicGo+Gitee实现图片上传功能
    Java substring() 方法
    Java lastIndexOf的用法
    Tomcat控制台乱码处理解决方法
    HTTP 协议中 URI 和 URL 有什么区别?
    java如何判断某一变量属于什么类型
    Idea发布web项目显示“找不到应用程序”的解决方法
  • 原文地址:https://www.cnblogs.com/xiamuyouren/p/3273283.html
Copyright © 2020-2023  润新知