Java对象排序

时间:2021-02-17 22:49:22

java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口

  1. //Product.java
  2. import java.util.Date;
  3. //public class Product implements Comparable {//类内比较
  4. public class Product{
  5. private String name;
  6. private Date date;
  7. private int price;
  8. public int getPrice() {
  9. return price;
  10. }
  11. public void setPrice(int price) {
  12. this.price = price;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public Date getDate() {
  21. return date;
  22. }
  23. public void setDate(Date date) {
  24. this.date = date;
  25. }
  26. //用于类内比较
  27. //  @Override//覆写compareTo(Object o)方法
  28. //  public int compareTo(Product o) {
  29. //      return -this.date.compareTo(o.date);
  30. //  }
  31. }
  1. //ProductComparable.java
  2. import java.util.Date;
  3. import java.util.Comparator;
  4. public class ProductComparable implements Comparator<Product> {
  5. // 对象的排序方式[升、降]
  6. public static boolean sortASC = true;
  7. // 对象的排序属性
  8. public static boolean sortByName = false;
  9. public static boolean sortByDate = false;
  10. public static boolean sortByPrice = false;
  11. @Override
  12. public int compare(Product pro1, Product pro2) {
  13. int result = 0;
  14. if(sortASC){
  15. if(sortByName){
  16. String pro1name = pro1.getName();
  17. String pro2name = pro2.getName();
  18. result = pro1name.compareTo(pro2name);
  19. }else if(sortByDate){
  20. Date pro1Date = pro1.getDate();
  21. Date pro2Date = pro2.getDate();
  22. result = pro1Date.compareTo(pro2Date);
  23. }else if(sortByPrice){
  24. Integer pro1Price = pro1.getPrice();
  25. Integer pro2Price = pro2.getPrice();
  26. result = pro1Price.compareTo(pro2Price);
  27. }
  28. }else{
  29. if(sortByName){
  30. String pro1name = pro1.getName();
  31. String pro2name = pro2.getName();
  32. result =  -pro1name.compareTo(pro2name);
  33. }else if(sortByDate){
  34. Date pro1Date = pro1.getDate();
  35. Date pro2Date = pro2.getDate();
  36. result =  -pro1Date.compareTo(pro2Date);
  37. }else if(sortByPrice){
  38. Integer pro1Price = pro1.getPrice();
  39. Integer pro2Price = pro2.getPrice();
  40. result =  -pro1Price.compareTo(pro2Price);
  41. }
  42. }
  43. return result;
  44. }
  45. }
  1. //测试代码
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import java.util.Locale;
  9. public class ProductSort {
  10. public static void main(String[] args) throws ParseException {
  11. Product pro1 = new Product();
  12. pro1.setName("pro1");
  13. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);
  14. pro1.setDate(sdf.parse("2009-03-23"));
  15. pro1.setPrice(89);
  16. Product pro2 = new Product();
  17. pro2.setName("proc2");
  18. pro2.setDate(sdf.parse("2009-02-23"));
  19. pro2.setPrice(45);
  20. Product pro3 = new Product();
  21. pro3.setName("proc3");
  22. pro3.setDate(sdf.parse("2009-01-23"));
  23. pro3.setPrice(83);
  24. Product pro4 = new Product();
  25. pro4.setName("proc4");
  26. pro4.setDate(sdf.parse("2009-01-23"));
  27. pro4.setPrice(800);
  28. List<Product> productList = new ArrayList<Product>();
  29. productList.add(pro1);
  30. productList.add(pro3);
  31. productList.add(pro2);
  32. productList.add(pro4);
  33. System.out.println("排序前————————————————————");
  34. for(Product p: productList){
  35. System.out.println(p.getName()+"----"+p.getPrice()+"----"+p.getDate());
  36. }
  37. ProductComparable sort = new ProductComparable();
  38. ProductComparable.sortASC = false;//降序
  39. ProductComparable.sortByPrice=true;  //设置排序属性生效
  40. Collections.sort(productList,sort);
  41. System.out.println("排序后————————————————————");
  42. for(Iterator<Product>  iter = productList.iterator(); iter.hasNext();){
  43. Product p = (Product)iter.next();
  44. System.out.println(p.getName()+"----"+p.getPrice()+"---"+p.getDate());
  45. }
  46. }
  47. }

推荐使用Comparator实现排序

因为 你用一个第三方的类,但他没实现Comparable接口,而你又不能改他代码;另外,类一旦写好后是不允许修改的,但可以扩展,所以只能用Comparator接口

java实现对象比较,可以实现java.lang.Comparable或java.util.Comparator接口

  1. //Product.java
  2. import java.util.Date;
  3. //public class Product implements Comparable {//类内比较
  4. public class Product{
  5. private String name;
  6. private Date date;
  7. private int price;
  8. public int getPrice() {
  9. return price;
  10. }
  11. public void setPrice(int price) {
  12. this.price = price;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public Date getDate() {
  21. return date;
  22. }
  23. public void setDate(Date date) {
  24. this.date = date;
  25. }
  26. //用于类内比较
  27. //  @Override//覆写compareTo(Object o)方法
  28. //  public int compareTo(Product o) {
  29. //      return -this.date.compareTo(o.date);
  30. //  }
  31. }
  1. //ProductComparable.java
  2. import java.util.Date;
  3. import java.util.Comparator;
  4. public class ProductComparable implements Comparator<Product> {
  5. // 对象的排序方式[升、降]
  6. public static boolean sortASC = true;
  7. // 对象的排序属性
  8. public static boolean sortByName = false;
  9. public static boolean sortByDate = false;
  10. public static boolean sortByPrice = false;
  11. @Override
  12. public int compare(Product pro1, Product pro2) {
  13. int result = 0;
  14. if(sortASC){
  15. if(sortByName){
  16. String pro1name = pro1.getName();
  17. String pro2name = pro2.getName();
  18. result = pro1name.compareTo(pro2name);
  19. }else if(sortByDate){
  20. Date pro1Date = pro1.getDate();
  21. Date pro2Date = pro2.getDate();
  22. result = pro1Date.compareTo(pro2Date);
  23. }else if(sortByPrice){
  24. Integer pro1Price = pro1.getPrice();
  25. Integer pro2Price = pro2.getPrice();
  26. result = pro1Price.compareTo(pro2Price);
  27. }
  28. }else{
  29. if(sortByName){
  30. String pro1name = pro1.getName();
  31. String pro2name = pro2.getName();
  32. result =  -pro1name.compareTo(pro2name);
  33. }else if(sortByDate){
  34. Date pro1Date = pro1.getDate();
  35. Date pro2Date = pro2.getDate();
  36. result =  -pro1Date.compareTo(pro2Date);
  37. }else if(sortByPrice){
  38. Integer pro1Price = pro1.getPrice();
  39. Integer pro2Price = pro2.getPrice();
  40. result =  -pro1Price.compareTo(pro2Price);
  41. }
  42. }
  43. return result;
  44. }
  45. }
  1. //测试代码
  2. import java.text.ParseException;
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Collections;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import java.util.Locale;
  9. public class ProductSort {
  10. public static void main(String[] args) throws ParseException {
  11. Product pro1 = new Product();
  12. pro1.setName("pro1");
  13. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-dd-MM",Locale.CHINA);
  14. pro1.setDate(sdf.parse("2009-03-23"));
  15. pro1.setPrice(89);
  16. Product pro2 = new Product();
  17. pro2.setName("proc2");
  18. pro2.setDate(sdf.parse("2009-02-23"));
  19. pro2.setPrice(45);
  20. Product pro3 = new Product();
  21. pro3.setName("proc3");
  22. pro3.setDate(sdf.parse("2009-01-23"));
  23. pro3.setPrice(83);
  24. Product pro4 = new Product();
  25. pro4.setName("proc4");
  26. pro4.setDate(sdf.parse("2009-01-23"));
  27. pro4.setPrice(800);
  28. List<Product> productList = new ArrayList<Product>();
  29. productList.add(pro1);
  30. productList.add(pro3);
  31. productList.add(pro2);
  32. productList.add(pro4);
  33. System.out.println("排序前————————————————————");
  34. for(Product p: productList){
  35. System.out.println(p.getName()+"----"+p.getPrice()+"----"+p.getDate());
  36. }
  37. ProductComparable sort = new ProductComparable();
  38. ProductComparable.sortASC = false;//降序
  39. ProductComparable.sortByPrice=true;  //设置排序属性生效
  40. Collections.sort(productList,sort);
  41. System.out.println("排序后————————————————————");
  42. for(Iterator<Product>  iter = productList.iterator(); iter.hasNext();){
  43. Product p = (Product)iter.next();
  44. System.out.println(p.getName()+"----"+p.getPrice()+"---"+p.getDate());
  45. }
  46. }
  47. }

推荐使用Comparator实现排序

因为 你用一个第三方的类,但他没实现Comparable接口,而你又不能改他代码;另外,类一旦写好后是不允许修改的,但可以扩展,所以只能用Comparator接口

Java对象排序的更多相关文章

  1. Java 对象排序详解

    很难想象有Java开发人员不曾使用过Collection框架.在Collection框架中,主要使用的类是来自List接口中的ArrayList,以及来自Set接口的HashSet.TreeSet,我 ...

  2. java对象排序(Comparable)详细实例

    对象实现Comparable接口 public class Field implements Comparable<Field>{ private String name; private ...

  3. &lbrack;Java&rsqb; 对象排序示例

    package test.collections; import java.util.ArrayList; import java.util.Collection; import java.util. ...

  4. Java对象排序两种方法

    转载:https://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序 ...

  5. 多字段 java对象排序

    public class ReflexUtil { static Logger logger = LoggerFactory.getLogger(ReflexUtil.class); //getMet ...

  6. Java笔记12:Java对象排序

    代码: import java.util.Arrays; import java.util.Comparator; class Person { private String name; privat ...

  7. Java - 简单的对象排序 - Comparator

    注:对象排序,就是对对象中的某一字段进行比较,以正序或倒序进行排序. 例: 需要排序的对象: public class Person { public int age; public String n ...

  8. &lbrack;个人原创&rsqb;关于java中对象排序的一些探讨(三)

    这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/ 对对象排序也可以使用Guava中的Ordering类. 构造Orderin ...

  9. Java集合中对象排序

    集合中的对象排序需求还是比較常见的.当然我们能够重写equals方法,循环比較:同一时候Java为我们提供了更易使用的APIs.当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparato ...

随机推荐

  1. 通过 listboxitem 查找属于listbox第几条数据

    public override System.Windows.Style SelectStyle(object item, System.Windows.DependencyObject contai ...

  2. php-工厂模式(Factory Method)解析

    关于工厂模式,首先要了解的就是多态这个概念:“多态是指在面向对象中能够根据使用类的上下文来重新定义或改变类的性质和行为”,这句话是我在其他博客看到,他已经概括的很好了,我就直接抄袭了.哈哈 通常简单工 ...

  3. NGINX原理分析 之 SLAB分配机制

    1 引言 众所周知,操作系统使用伙伴系统管理内存,不仅会造成大量的内存碎片,同时处理效率也较低下.SLAB是一种内存管理机制,其拥有较高的处理效率,同时也 有效的避免内存碎片的产生,其核心思想是预分配 ...

  4. java学习之路---线程(重点)

     1.多线程是一种并发机制的有效手段.进程和线程一样,都是实现并发的一个基本单位.线程是比进程更小的一种实现单位,线程是在进程的基础上的进一步划分.所谓的多线就是在一个进程中产生了多个线程,这些线程可 ...

  5. SQL Server系统表讲解

    1. sysobjects http://www.cnblogs.com/atree/p/SQL-Server-sysobjects.html   2.syscomments http://www.c ...

  6. 软件project(五)——可行性研究

    一.目的 用最小的代价高效率的确定问题是否可以解决. 不是去解决这个问题,而是确定问题是否值得去解决.进行可行性研究简化了系统分析和系统设计的过程. 二.任务 (1)进一步分析问题定义. (2)分析员 ...

  7. java 文件的基本操作

    1 /** * java 文件操作 * 2016/5/10 **/ package cn.Java_7; import java.io.*; import java.util.Scanner; imp ...

  8. React 深入系列1:React 中的元素、组件、实例和节点

    文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助大家加深对React的理解,以及在项目中 ...

  9. Js&sol;Bind&lpar;&rpar;的认识

    1.bind( eventType [, eventData], handler(eventObject))2.向绑定的对象上面提供一些事件方法的行为.其中三个参数的意义分别代表: 一.eventTy ...

  10. Kotlin 开篇

    Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发官网地址:http://kotlinlang.org.JetBrains,作为目前广受欢迎的 Java IDE Intel ...