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);
java和python根据对象某一个属性排序的更多相关文章
- java工具类之按对象中某属性排序
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang ...
- 《Python cookbook》 “定义一个属性可由用户修改的装饰器” 笔记
看<Python cookbook>的时候,第9.5部分,"定义一个属性可由用户修改的装饰器",有个装饰器理解起来花了一些时间,做个笔记免得二刷这本书的时候忘了 完整代 ...
- JAVA:类,对象,成员属性,成员方法,构造方法,类变量,类方法<2>
一.类的定义 一个全面的类定义是比较复杂的, 定义如下:
- IE对象最后一个属性后不要加逗号,否则在IE7及以下版本中会报错
某函数返回一个对象,如果在最后一个属性后加逗号,IE7及以下版本中会报错 正确代码: return{ top:rect.top-top, bottom:rect.bottom-top, left:re ...
- js 对象数组根据对象中的属性排序
function createComparisonFunction(propertyName){ return function(object1,object2){ var value1 = obje ...
- java中两个对象间的属性值复制,比较,转为map方法实现
package com.franson.study.util; import java.lang.reflect.InvocationTargetException; import java.lang ...
- Java集合-Python数据结构比较
Java list与Python list相比较 Java List:有序的,可重复的.(有序指的是集合中对象的顺序与添加顺序相同) Python list(列表)是有序的,可变的. Java Lis ...
- python-面向对象-09_类属性和类方法
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- java和python对比
一:解释性和编译型 梳理 编译型:源代码经过编译直接变为二进制的机器语言,每次都可以直接重新运行不需要翻译.典型的就是c语言. 解释性:java和python都是解释型,源代码经过编译变为字节码文件, ...
随机推荐
- Fragments | Android Developer
Definition A Fragment represents a behavior or a potion of user interface in an Activity. You can co ...
- regulator
http://blog.sina.com.cn/s/blog_5e99b41e0101a3ng.html http://blog.sina.com.cn/s/blog_694348b00100n3ip ...
- 转载:Cocos2D-x 游戏接入 Windows 设备所需做的六件事
原文地址:http://msopentech.com/zh-hans/blog/2014/05/09/cocos2d-x-%E6%B8%B8%E6%88%8F%E6%8E%A5%E5%85%A5-wi ...
- HDU1272
http://acm.split.hdu.edu.cn/showproblem.php?pid=1272 对于这道题,只要找出形成的图是不是连通无环的图即可.即是判断输入的两个点是否来自同一个父亲结点 ...
- 将本地仓库托管到GitHub
在初始化仓库之前,要确认ssh key是否正确 ssh -T git@github.com 正确的结果如下 Hi username! You've successfully authenticated ...
- Windows 消息机制
Windows 是一个消息驱动的操作系统.一个消息由一个消息名称(UINT 类型)和两个参数(WPARAM,LPARAM)构成.当用户进行了输入或是窗口的状态发生改变时,系统会发送消息到某一个窗口.例 ...
- Microsoft Visual C++ 2010(86) Redistributable不能安装完美解决
见http://jingyan.baidu.com/article/9c69d48f41aa6313c9024ebe.html 1. 去mircosoft下载安装包(vcredist_x64.exe) ...
- mac 下安装nginx
1,mac下的依赖: pcre-8.38.tar.gz nginx-1.4.7.tar.gz 2,解压pcre:进入器解压目录. EddydeMacBook-Pro:~ eddy$ cd /Users ...
- js实现页面悬浮框
当滚动条下拉时,悬浮框位置不变,主要是 position:fixed;样式的作用. 当下拉到一定程度,接近footer时,我用js控制div消失,往上拉滚动条时又显示. <!DOCTYPE ht ...
- javascript设计模式-工厂模式
简单工厂模式:使用一个类来生成实例. 复杂工厂模式:使用子类来决定一个成员变量应该是哪个具体的类的实例. 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口.通过工 ...