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都是解释型,源代码经过编译变为字节码文件, ...
随机推荐
- OC基础(12)
new方法实现原理 类的本质 类的启动过程 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bo ...
- git remove cache
若在提交.gitignore之前,不小心提交了无用的文件入repo,可以用以下命令在repo中去除这些文件 git rm -r --cached <filename or .> git a ...
- 死锁及oracle死锁--转载
今天看群里在讨论数据库死锁的问题,也一起研究了下,查了些资料在这里总结下. 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. ...
- 深度解析国内O2O模式
今日在网上发现这篇文章很棒,详细的分析了当前BAT矩阵下的o2o 的模式.所以转载过来与大家一起分享. 文章来自于:http://www.siilu.com/20151214/158917.shtml ...
- Android Studio实用快捷键汇总
以下是平时在Windwos系统上用Android Studio进行开发时常用到的一些快捷键,虽然不多,但是感觉都还蛮实用的,因此记录下来,如果什么时候不小心忘记了可以拿来翻一翻,That would ...
- 【Unity Shaders】学习笔记——SurfaceShader(七)法线贴图
[Unity Shaders]学习笔记——SurfaceShader(七)法线贴图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5627565.html 写 ...
- SICP 1.1-1.5
1.1 a = b = nil 1.2 (/ (+ (- (- (+ (/ ))))) (* (- ) (- )) 1.3 a = b = nil 1.4... 1.5 (define (p) (p) ...
- oracle创建索引后sqlldr导入错误
SQL*Loader-: Error calling once/load initialization ORA-: Table TABLE_LOG has index defined upon it. ...
- 使用扩展方法(this 扩展类型)
namespace ConsoleApp_UseExtendWays{ class Program { static void Main(string[] args) { Student s = ne ...
- ftp自动上传下载文件脚本
FTP自动登录批量下载文件 从ftp服务器192.168.1.60 上的/home/data 到本地的/home/databackup目录 #!/bin/bash ftp -v -n 192.168. ...