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都是解释型,源代码经过编译变为字节码文件, ...
随机推荐
- iOS UILabel详解
1.创建 CGRect rect = CGRectMake(100, 200, 50, 50); UILabel *label = [[UILabel alloc] initWithFrame:rec ...
- 下拉列表autocomplete各种实现方式比较
方法一:用form 表单的datalist属性,此时会以首字母补充排序.实现效果参考:http://www.w3schools.com/html/tryit.asp?filename=tryhtml_ ...
- JMeter二次开发(2)-编写 JSON Assertion 插件
本篇文章主要介绍如何对JMeter进行二次开发,添加自己所需的功能.这里以Json验证为例进行说明.在web接口测试过程中,JSON的应用已经非常普遍,但原声的JMeter并没有提供Json及Json ...
- 如何设置修改WPS批注上的用户信息名称
http://jingyan.baidu.com/article/6b18230953cec7ba59e1596b.html 点击左上角的“WPS文字”: 选择“选项”: 点击“用户信息”: ...
- 关于NopCommerce3.6版的@Html.Widget(“home_page_top”)的说明
以首页幻灯片为例子,首页幻灯片是在插件Nop.Plugin.Widgets.NivoSlider里面实现的 首页视图位置 这里其实是加载插件里面的视图内容,具体实现在插件实现 这个是扩展方法,就是执行 ...
- Java EXCEL导入的两种方式JXL和POI
Excel导入有两个方法:JXL 和POI 1.JXL解析Excel public class JxlReadExcel { /** * JXL解析Excel * @author Da ...
- Activity使用Dialog样式导致点击空白处自动关闭的问题
将Activity设置成窗口的样式实现Dialog或者Popupwindow效果在开发中是很常用的一种方式,在AndroidMenifest.xml中将需要设置的Activity增加android:t ...
- asp.net解决数据转换为DBNULL的问题
if (string.IsNullOrEmpty(CookieHelper.GetCookie("DEPID", "theway").ToString()) = ...
- Ugly Window 【acm题】
话说好久没有碰acm题目了.............................. 看到Ugly Window这道题目,没有多想,就直接先找到字母的连续长度和连续高度,并统计该字母的总个数,然后用 ...
- javascript设计模式-桥接模式
在系统中,某些类由于自身逻辑,具有两个或两个以上维度的变化,如何使得该类型可以沿多个方向变化,但又不引入额外的复杂度,这就是桥接模式要解决的问题. 定义:桥接模式(Bridge),将抽象部分与它的实现 ...