`
JaHunter
  • 浏览: 91988 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

集合排序

    博客分类:
  • java
 
阅读更多
集合排序(BigDecimal、根据对象某个属性排序)
 
 
     /**
      * 按照属性property给list排序
      * 支持的属性类型:Short Integer Long Float Double BigDecimal Date
      * @param <E>
      * @param list
      * @param property
      * @param clazz
      * @param ascOrDesc  (true 是 asc, false 是 desc)
      */
     public static<E> void sortList(List<E> list, final String property, final boolean ascOrDesc) {
           
            if (list == null || list.isEmpty()) {
               return;
           }
           
           Collections. sort(list, new Comparator<E>() {
 
                 @Override
                 public int compare(E o1, E o2) {
                      try {
                           Field field1 = o1.getClass().getField(property);
                           Field field2 = o2.getClass().getField(property);
                            try {
                                Class<?> clazz =  field1.get(o1).getClass();
                                 if (clazz == Short. class || clazz == Integer.class || clazz == Long.class
                                           || clazz == Float.class || clazz == Double.class) {
                                      if (ascOrDesc) {      //asc
                                            return field1.getInt(o1) - field2.getInt(o2);
                                     } else {              //desc
                                            return field2.getInt(o2) - field1.getInt(o1);               
                                     }    
                                }
                                 if (clazz == BigDecimal. class) {
                                     BigDecimal b1 = (BigDecimal)field1.get(o1);
                                     BigDecimal b2 = (BigDecimal)field2.get(o2);
                                      if (ascOrDesc) {      //asc
                                            return b1.compareTo(b2);
                                     } else {              //desc
                                            return b2.compareTo(b1);               
                                     }    
                                }
                                 if (clazz == Date. class) {
                                     Date b1 = (Date)field1.get(o1);
                                     Date b2 = (Date)field2.get(o2);
                                      if (ascOrDesc) {      //asc
                                            return b1.compareTo(b2);
                                     } else {              //desc
                                            return b2.compareTo(b1);               
                                     }    
                                }
                           } catch (IllegalArgumentException e) {
                                e.printStackTrace();
                           } catch (IllegalAccessException e) {
                                e.printStackTrace();
                           }
                     } catch (SecurityException e) {
                           e.printStackTrace();
                     } catch (NoSuchFieldException e) {
                           e.printStackTrace();
                     }
                     
                      return 0;
                }
                
           });
     }
     
     /**
      * 按照属性property给array排序
      * 支持的属性类型:Short Integer Long Float Double BigDecimal Date
      * @param <E>
      * @param e
      * @param property
      * @param ascOrDesc (true 是 asc, false 是 desc)
      */
     public static<E> void sortArray(E[] e, final String property, final boolean ascOrDesc) {
           
            if (e == null || e. length == 0) {
               return;
           }
           
           Arrays. sort(e, new Comparator<E>() {
 
                 @Override
                 public int compare(E o1, E o2) {
                      try {
                           Field field1 = o1.getClass().getField(property);
                           Field field2 = o2.getClass().getField(property);
                            try {
                                Class<?> clazz =  field1.get(o1).getClass();
                                 if (clazz == Short. class || clazz == Integer.class || clazz == Long.class
                                           || clazz == Float.class || clazz == Double.class) {
                                      if (ascOrDesc) {      //asc
                                            return field1.getInt(o1) - field2.getInt(o2);
                                     } else {              //desc
                                            return field2.getInt(o2) - field1.getInt(o1);               
                                     }    
                                }
                                 if (clazz == BigDecimal. class) {
                                     BigDecimal b1 = (BigDecimal)field1.get(o1);
                                     BigDecimal b2 = (BigDecimal)field2.get(o2);
                                      if (ascOrDesc) {      //asc
                                            return b1.compareTo(b2);
                                     } else {              //desc
                                            return b2.compareTo(b1);               
                                     }    
                                }
                                 if (clazz == Date. class) {
                                     Date b1 = (Date)field1.get(o1);
                                     Date b2 = (Date)field2.get(o2);
                                      if (ascOrDesc) {      //asc
                                            return b1.compareTo(b2);
                                     } else {              //desc
                                            return b2.compareTo(b1);               
                                     }    
                                }
                           } catch (IllegalArgumentException e) {
                                e.printStackTrace();
                           } catch (IllegalAccessException e) {
                                e.printStackTrace();
                           }
                     } catch (SecurityException e) {
                           e.printStackTrace();
                     } catch (NoSuchFieldException e) {
                           e.printStackTrace();
                     }
                     
                      return 0;
                }
                
           });
     }
     
     /**
      * 直接用Collections.sort(list <BigDecimal>);即可,如果是BigDecimal数组则需要像下面这样重写
      * @param bds
      * @param ascOrDesc
      */
     public static void sortBigDecimalArray(BigDecimal[] bds, final boolean ascOrDesc) {
           
            if (bds == null || bds. length == 0) {
               return;
           }
           
           Arrays. sort(bds, new Comparator<BigDecimal>() {
 
                 @Override
                 public int compare(BigDecimal o1, BigDecimal o2) {
                      if (ascOrDesc) {      //asc
                            return o1.compareTo(o2);
                     } else {              //desc
                            return o2.compareTo(o1);                        
                     }
                }
           });
           
     }
分享到:
评论

相关推荐

    Java 集合排序及java 集合类详解

    Java 集合排序及java 集合类详解 Java 集合排序及java 集合类详解,Java里面最重要、最常用也就是集合那部分了,能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。本教程详细解释了关于Java中的集合是...

    Java集合排序及java集合类详解.pdf

    ### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...

    List集合排序222222

    导入jar 包 调用 String[] arr1 = new String[1]; ... 参数1 排序的集合 参数2 排序的字段(与定义字段一致) 可多个 参数3 排序方式(asc desc) 暂时只支持String 和int的排序 可能有些BUG 敬请谅解

    java HashSet 集合排序

    java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。

    java中集合排序

    本文将深入探讨Java中集合排序的相关知识点,包括基本概念、排序方法以及常用类的实现。 1. **集合接口与实现** Java集合框架主要包括`List`, `Set`, 和 `Map`三大接口。其中,`List`接口要求元素有序,允许重复;...

    Java集合排序及java集合类详解

    在Java集合排序方面,我们主要关注List和Map。对于List,可以使用Collections.sort()方法进行排序,这个方法默认使用元素的自然顺序,如果元素是自定义对象,需要实现Comparable接口或者提供Comparator。对于Map,...

    java中进行集合排序

    ### Java中进行集合排序 在Java编程中,对集合(如`List`)中的对象进行排序是一项常见的操作。本文将详细介绍如何根据对象的特定属性来实现升序或降序排序。 #### 标题:Java中进行集合排序 该标题表明文章的...

    java集合排序方法总结共13页.pdf.zip

    Java集合排序涉及的知识点广泛,包括基本的`Collections.sort()`、自定义Comparator、Stream API、并行排序以及泛型等。理解这些概念并熟练运用,能显著提高代码质量和效率。在实际编程中,根据具体需求选择合适的...

    JAVA 注册界面连数据库+集合排序

    标题中的“JAVA 注册界面连数据库+集合排序”揭示了两个主要的知识点:Java编程以及数据库连接,特别是与MySQL数据库的交互,同时涉及到数据结构的排序处理。 首先,让我们深入探讨Java编程。Java是一种广泛使用的...

    .Net中的集合排序可以这么玩你知道吗

    .Net中的集合排序可以这么玩你知道吗 .Net中的集合排序可以这么玩你知道吗

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    ### Java集合排序及java集合类详解 #### 集合框架概述 集合是Java编程语言中非常核心且广泛使用的部分,对于深入理解和高效使用Java语言至关重要。本文将围绕Java集合框架进行详细介绍,包括Collection、List、Set...

    java集合排序及文件读取.rar

    在"java集合排序及文件读取.rar"这个压缩包中,我们很可能会找到关于如何在Java中对集合进行排序以及如何读取文件的示例代码。让我们详细探讨这些关键知识点。 **Java集合排序** Java集合框架包括接口如`List`、`...

    Java集合排序及java集合类详解(Collection、List、Map、Set).doc

    Java集合排序及java集合类详解(Collection、List、Map、Set).doc

Global site tag (gtag.js) - Google Analytics