Java对象排序
java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口
- //Product.java
- import java.util.Date;
- //public class Product implements Comparable {//类内比较
- public class Product{
- private String name;
- private Date date;
- private int price;
- public int getPrice() {
- return price;
- }
- public void setPrice(int price) {
- this.price = price;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Date getDate() {
- return date;
- }
- public void setDate(Date date) {
- this.date = date;
- }
- //用于类内比较
- // @Override//覆写compareTo(Object o)方法
- // public int compareTo(Product o) {
- // return -this.date.compareTo(o.date);
- // }
- }
- //ProductComparable.java
- import java.util.Date;
- import java.util.Comparator;
- public class ProductComparable implements Comparator<Product> {
- // 对象的排序方式[升、降]
- public static boolean sortASC = true;
- // 对象的排序属性
- public static boolean sortByName = false;
- public static boolean sortByDate = false;
- public static boolean sortByPrice = false;
- @Override
- public int compare(Product pro1, Product pro2) {
- int result = 0;
- if(sortASC){
- if(sortByName){
- String pro1name = pro1.getName();
- String pro2name = pro2.getName();
- result = pro1name.compareTo(pro2name);
- }else if(sortByDate){
- Date pro1Date = pro1.getDate();
- Date pro2Date = pro2.getDate();
- result = pro1Date.compareTo(pro2Date);
- }else if(sortByPrice){
- Integer pro1Price = pro1.getPrice();
- Integer pro2Price = pro2.getPrice();
- result = pro1Price.compareTo(pro2Price);
- }
- }else{
- if(sortByName){
- String pro1name = pro1.getName();
- String pro2name = pro2.getName();
- result = -pro1name.compareTo(pro2name);
- }else if(sortByDate){
- Date pro1Date = pro1.getDate();
- Date pro2Date = pro2.getDate();
- result = -pro1Date.compareTo(pro2Date);
- }else if(sortByPrice){
- Integer pro1Price = pro1.getPrice();
- Integer pro2Price = pro2.getPrice();
- result = -pro1Price.compareTo(pro2Price);
- }
- }
- return result;
- }
- }
- //测试代码
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Locale;
- public class ProductSort {
- public static void main(String[] args) throws ParseException {
- Product pro1 = new Product();
- pro1.setName("pro1");
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);
- pro1.setDate(sdf.parse("2009-03-23"));
- pro1.setPrice(89);
- Product pro2 = new Product();
- pro2.setName("proc2");
- pro2.setDate(sdf.parse("2009-02-23"));
- pro2.setPrice(45);
- Product pro3 = new Product();
- pro3.setName("proc3");
- pro3.setDate(sdf.parse("2009-01-23"));
- pro3.setPrice(83);
- Product pro4 = new Product();
- pro4.setName("proc4");
- pro4.setDate(sdf.parse("2009-01-23"));
- pro4.setPrice(800);
- List<Product> productList = new ArrayList<Product>();
- productList.add(pro1);
- productList.add(pro3);
- productList.add(pro2);
- productList.add(pro4);
- System.out.println("排序前————————————————————");
- for(Product p: productList){
- System.out.println(p.getName()+"----"+p.getPrice()+"----"+p.getDate());
- }
- ProductComparable sort = new ProductComparable();
- ProductComparable.sortASC = false;//降序
- ProductComparable.sortByPrice=true; //设置排序属性生效
- Collections.sort(productList,sort);
- System.out.println("排序后————————————————————");
- for(Iterator<Product> iter = productList.iterator(); iter.hasNext();){
- Product p = (Product)iter.next();
- System.out.println(p.getName()+"----"+p.getPrice()+"---"+p.getDate());
- }
- }
- }
推荐使用Comparator实现排序
因为 你用一个第三方的类,但他没实现Comparable接口,而你又不能改他代码;另外,类一旦写好后是不允许修改的,但可以扩展,所以只能用Comparator接口
java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口
- //Product.java
- import java.util.Date;
- //public class Product implements Comparable {//类内比较
- public class Product{
- private String name;
- private Date date;
- private int price;
- public int getPrice() {
- return price;
- }
- public void setPrice(int price) {
- this.price = price;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Date getDate() {
- return date;
- }
- public void setDate(Date date) {
- this.date = date;
- }
- //用于类内比较
- // @Override//覆写compareTo(Object o)方法
- // public int compareTo(Product o) {
- // return -this.date.compareTo(o.date);
- // }
- }
- //ProductComparable.java
- import java.util.Date;
- import java.util.Comparator;
- public class ProductComparable implements Comparator<Product> {
- // 对象的排序方式[升、降]
- public static boolean sortASC = true;
- // 对象的排序属性
- public static boolean sortByName = false;
- public static boolean sortByDate = false;
- public static boolean sortByPrice = false;
- @Override
- public int compare(Product pro1, Product pro2) {
- int result = 0;
- if(sortASC){
- if(sortByName){
- String pro1name = pro1.getName();
- String pro2name = pro2.getName();
- result = pro1name.compareTo(pro2name);
- }else if(sortByDate){
- Date pro1Date = pro1.getDate();
- Date pro2Date = pro2.getDate();
- result = pro1Date.compareTo(pro2Date);
- }else if(sortByPrice){
- Integer pro1Price = pro1.getPrice();
- Integer pro2Price = pro2.getPrice();
- result = pro1Price.compareTo(pro2Price);
- }
- }else{
- if(sortByName){
- String pro1name = pro1.getName();
- String pro2name = pro2.getName();
- result = -pro1name.compareTo(pro2name);
- }else if(sortByDate){
- Date pro1Date = pro1.getDate();
- Date pro2Date = pro2.getDate();
- result = -pro1Date.compareTo(pro2Date);
- }else if(sortByPrice){
- Integer pro1Price = pro1.getPrice();
- Integer pro2Price = pro2.getPrice();
- result = -pro1Price.compareTo(pro2Price);
- }
- }
- return result;
- }
- }
- //测试代码
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Locale;
- public class ProductSort {
- public static void main(String[] args) throws ParseException {
- Product pro1 = new Product();
- pro1.setName("pro1");
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);
- pro1.setDate(sdf.parse("2009-03-23"));
- pro1.setPrice(89);
- Product pro2 = new Product();
- pro2.setName("proc2");
- pro2.setDate(sdf.parse("2009-02-23"));
- pro2.setPrice(45);
- Product pro3 = new Product();
- pro3.setName("proc3");
- pro3.setDate(sdf.parse("2009-01-23"));
- pro3.setPrice(83);
- Product pro4 = new Product();
- pro4.setName("proc4");
- pro4.setDate(sdf.parse("2009-01-23"));
- pro4.setPrice(800);
- List<Product> productList = new ArrayList<Product>();
- productList.add(pro1);
- productList.add(pro3);
- productList.add(pro2);
- productList.add(pro4);
- System.out.println("排序前————————————————————");
- for(Product p: productList){
- System.out.println(p.getName()+"----"+p.getPrice()+"----"+p.getDate());
- }
- ProductComparable sort = new ProductComparable();
- ProductComparable.sortASC = false;//降序
- ProductComparable.sortByPrice=true; //设置排序属性生效
- Collections.sort(productList,sort);
- System.out.println("排序后————————————————————");
- for(Iterator<Product> iter = productList.iterator(); iter.hasNext();){
- Product p = (Product)iter.next();
- System.out.println(p.getName()+"----"+p.getPrice()+"---"+p.getDate());
- }
- }
- }
推荐使用Comparator实现排序
因为 你用一个第三方的类,但他没实现Comparable接口,而你又不能改他代码;另外,类一旦写好后是不允许修改的,但可以扩展,所以只能用Comparator接口
Java对象排序的更多相关文章
- Java 对象排序详解
很难想象有Java开发人员不曾使用过Collection框架.在Collection框架中,主要使用的类是来自List接口中的ArrayList,以及来自Set接口的HashSet.TreeSet,我 ...
- java对象排序(Comparable)详细实例
对象实现Comparable接口 public class Field implements Comparable<Field>{ private String name; private ...
- [Java] 对象排序示例
package test.collections; import java.util.ArrayList; import java.util.Collection; import java.util. ...
- Java对象排序两种方法
转载:https://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序 ...
- 多字段 java对象排序
public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexUtil.class); //getMet ...
- Java笔记12:Java对象排序
代码: import java.util.Arrays; import java.util.Comparator; class Person { private String name; privat ...
- Java - 简单的对象排序 - Comparator
注:对象排序,就是对对象中的某一字段进行比较,以正序或倒序进行排序. 例: 需要排序的对象: public class Person { public int age; public String n ...
- [个人原创]关于java中对象排序的一些探讨(三)
这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/ 对对象排序也可以使用Guava中的Ordering类. 构造Orderin ...
- Java集合中对象排序
集合中的对象排序需求还是比較常见的.当然我们能够重写equals方法,循环比較:同一时候Java为我们提供了更易使用的APIs.当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparato ...
随机推荐
- C#程序
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...
- Myeclipse如何关联源码
Myeclipse版本:Myeclipse2014 关联源码前要下载对应的源码,如本例的dom4j-1.6.1.jar,则去下载对应的源码dom4j-1.6.1.zip 如果做的是web项目,就要将该 ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...
- java练手 韩信点兵
Problem C 韩信点兵 时间限制:3000 ms | 内存限制:65535 KB 描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队 ...
- 遇到了IAR烧写程序出错,附解决办法The stack plug-in failed to set a breakpoint on "main"
今天做无线串口调试的时候用IAR7.51往CC2530无线模块烧程序的时候遇到了问题: 先是下载过程中有许多警告,然后就是提示无法跳断点,找不到main方法,每次烧程序都出现: The stack p ...
- SQL2008"阻止保存要求重新创建表的更改"问题的解决
在sql server2008中修改数据库中某个字段的时候,会弹出以下提示: 导致数据库表在表设计界面无法修改,好像只能通过sql语句修改,其实只要改一下sql server的一个配置项就可以了,具体 ...
- 02快速学习ExtJs之---第一个HelloWord!
这篇主要讲部署下ExtJS开发环境,以及搭建项目.我们使用ExtJs官方提供的Sencha Cmd来搭建 1.搭建项目 1.下载官方的Sencha Cmd工具,安装. 2..Window用户进入到命令 ...
- EF初接触01
自动属性:{get;set} 隐式类型 var, dynamic var: 隐式的类型推断出来,在编译阶段把Var换成对应的实际的类型 所以只应用在编译之间, 在运行阶段是和实际类型意义的 dyna ...
- MyEclipse 2013优化配置【转】
作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs MyEclipse 2013优化速度方案仍然主要有这么几个方面:去除无需加载的模块.取消冗余的配置.去除不 ...
- ruby on rails validates uniqueness
最近在处理一个小功能,每个元素可以有多个图片,每个图片的name表示了它是背景图还是海报图, 需要对每个元素的图片name做一个唯一性验证,一个元素不能添加两个海报图, 需要使用的是validates ...