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 ...
随机推荐
- 性能:15个JavaScript本地存储技术的函数库和工具
当构建更复杂的JavaScript应用程序运行在用户的浏览器是非常有用的,它可以在浏览器中存储信息,这样的信息可以被共享在不同的页面,浏览会话. 在最近的过去,这将有可能只被cookies文本文件保存 ...
- HTML5+学习笔记1-------边看代码边研究中
document.addEventListener('touchstart',function(){ return false; },true); touchstart当手指触摸屏幕时候触发,即使已经 ...
- uml面向对象建模基础总结
uml九种图,其中的细节不说了.在后面的具体使用中提到这九种图. 建模流程: 1.分析需求. 2.通过分析名词,发现类,使用到类图. 3.建立用例模型,通过参与者分析用例,使用到用例图. 4.为用例建 ...
- 免费的HTML5连载来了《HTML5网页开发实例详解》连载(二)
最近新浪.百度.腾讯.京东.大众点评.淘宝等流行的网站都加大了招聘HTML5的力度,HTML5开发人员成了抢手货,本次连载的是由大众点评前端工程师和一淘网前端工程师基情奉献的<HTML5网页开发 ...
- 【C语言入门教程】2.6 运算符
运算符是程序中用于数值运算的操作符,C 语言的运算符可分为 算术运算符.关系与逻辑运算符 和 位操作运算符 这 3 类. 2.6.1 算术运算符 算术运算符用来完成基本的数值运算,如 加.减.乘.除, ...
- C#爬虫之~苏飞万能框架使用教程
苏飞的框架帮助类,很多人应该都知道,不知道可以百度,此处直接说用法. //引入命名空间 using CsharpHttpHelper; //创建Httphelper对象 HttpHelper http ...
- _beginThreadex创建多线程解读【转】
_beginThreadex创建多线程解读 一.需要的头文件支持 #include <process.h> // for _beginthread() 需要的设置:Proj ...
- UIView的layoutSubviews和drawRect
原文: UIView的layoutSubviews和drawRect UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.setNeedsDis ...
- MyEclipse SVN安装方法
方法一:在线安装 1.打开HELP->MyEclipse Configuration Center.切换到SoftWare标签页. 2.点击Add Site 打开对话框,在对话框Name输入Sv ...
- Apache + Tomcat + mod_jk实现集群服务
Tomcat中的集群原理是通过组播的方式进行节点的查找并使用TCP连接进行会话的复制. 实现效果:用apache 分发请求到tomcat中的对应的项目 环境说明: 操作系统:window xp Jav ...