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 ...
随机推荐
- java在继承中父类的成员变量是否会被子类所覆盖
假如 父类 int num =7:子类 int num =9:父类是否会被子类所覆盖? 给你看两个例子: 第一个例子: 第二个例子: 这两个例子的区别只有一句话 由此证明了子类从父类继承的时候 ...
- recording just for inquiry in the future
auditd审计 相关命令有: auditd, auditctl, ausearch, aureport 相关文件: /etc/audit/auditd.conf, /etc/audit/audit. ...
- SASS的一些使用体会(安装-配置-开启firefox的调试)
对CSS预处理这个东西的看法,基本就是2种 第一种:不就是css吗,我会写就好了搞得那么复杂干嘛 第二种:感觉这个东西非常有必要,它规范了代码,使开发变得更轻松 好吧以前我是第一种,并且觉得又要配置环 ...
- 移动WebApp利用Chrome浏览器进行调试
详细的请看这个(HBuilder是我长期使用,而且值得支持的国内前端开发编辑器) http://ask.dcloud.net.cn/article/151 http://ask.dcloud.net. ...
- [转载]SVN如何恢复已删除文件或文件夹
http://blog.sina.com.cn/s/blog_694d806e0100kaqz.html 用TortoiseSVN: 1.在本地working copy中,用TortoiseSVN-& ...
- 黄学长模拟day1 球的序列
N个编号为1-n的球,每个球都有唯一的编号.这些球被排成两种序列,分别为A.B序列,现在需要重新寻找一个球的序列l,对于这个子序列l中任意的两个球,要求j,k(j<k),都要求满足lj在A中位置 ...
- R语言练习(二)
op <- par(mfrow = c(2, 2)) #设置画布 p2 <- curve(x^2, 0, 1) #绘制曲线 legend("topleft", inse ...
- codeblocks+Mingw 下配置开源c++单元测试工具 google test
google test 是google的c++开源单元测试工具,chrome的开发团队就是使用它. Code::Blocks 12.11(MinGW 4.7.1) (Windows版)Google T ...
- Java网络编程学习
服务器是指提供信息的计算机或程序,客户机是指请求信息的计算机或程序,而网络用于连接服务器与客户机,实现两者相互通信.但有时在某个网络中很难将服务器与客户机区分开.我们通常所说的“局域网”(Local ...
- C++中的内联成员函数与非内联成员函数
在C++中内联成员函数与非内联成员函数的可以分为两种情况: 1.如果成员函数的声明和定义是在一起的,那么无论有没有写inline这个成员函数都是内联的,如下: using namespace std; ...