`

对象数组中相对于某一个属性的排序

    博客分类:
  • java
阅读更多

package util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
/**
 * 对象数组排序.
 * 2009-9
 * @author ll3231
 */
public class SortObjects  {

    private String sortProperty;

    public String getSortProperty() {
        return sortProperty;
    }
   
    public void setSortProperty(String sortProperty) {
        this.sortProperty = sortProperty;
    }
//
//        Object[] ss = (Object[]) obj;
//   
//        try{
//         if(ss!=null)ss=sort(ss,sortProperty);
//        }catch(Exception e){
//            e.printStackTrace();
//        }
    // 对象数据排序
    public static Object[] sort(Object[] o, String sortProperty) {
        List<Object> list = new ArrayList<Object>();
        String[] methods = null;
        String row = "", toprow = "";
        if (o != null&&o[0]!=null)
            methods = getMethods(o[0], sortProperty);
        else return o;
        if(methods==null)return o;
        try {

            for (int k = 0; k < o.length; k++) {
                Object obj = o[k];
                if(obj==null)
                    continue;
                else
                    list.add(obj);
                for (int i= 0; i < methods.length; i++) {
                    Method topm = obj.getClass().getMethod(methods[i]);
                    try {
                        toprow += topm.invoke(obj).toString();
                    } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
               
                for (int i = k+1; i < o.length; i++) {
                    Object obj2 = o[i];
                    if(obj2==null)continue;
                   
                    row = "";
                    for (int j = 0; j < methods.length; j++) {
                        Method m = obj2.getClass().getMethod(methods[j]);
                        try {
                            row += m.invoke(obj2).toString();

                        } catch (IllegalArgumentException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (InvocationTargetException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    if(toprow.equals(row)){
                    //    System.out.println(k+"="+toprow+"\t\t"+i+"="+row);
                        list.add(o[i]);
                        o[i]=null;
                    }
                    //    System.out.println(k+"="+toprow+"\t\t"+i+"="+row);
                }
                toprow="";
            }
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
        //for(int i=0;i<list.size();i++){
        //    System.out.println(list.get(i).toString());
        //}
        for(int i=0;i<o.length;i++)
            o[i]=list.get(i);
        return o;
    }
//获得Object对象方法
    public static String[] getMethods(Object o, String sortProperty) {
        String s = "";
        //int k = 1;
        Method[] methods = o.getClass().getMethods();
        String[] sort = sortProperty.split(",");
        for (int i = 0; i < methods.length; i++) {
            for (int j = 0; j < sort.length; j++) {
                if (sort[j].equals(methods[i].getName())) {
                    s = s + sort[j] + ",";
                }
            }
        }
        if(s=="")return null;
        return s.substring(0, s.length() - 1).split(",");
    }

//    public static void main(String[] args) {
//        DD o0 = new DD();
//        DD o1 = new DD();
//        DD o2 = new DD();
//        DD o3 = new DD();
//        DD o4 = new DD();
//       
//        o0.setBis_disp_code("001");
//        o0.setBs_disp_code("001");
//    //    o0.setBsi_disp_cdoe("001");
//
//        o1.setBis_disp_code("002");
//        o1.setBs_disp_code("002");
//        //o1.setBsi_disp_cdoe("002");
//
//        o2.setBis_disp_code("001");
//        o2.setBs_disp_code("001");
//    //    o2.setBsi_disp_cdoe("001");
//
//        o3.setBis_disp_code("002");
//        o3.setBs_disp_code("002");
//    //    o3.setBsi_disp_cdoe("002");
//
//        o4.setBis_disp_code("002");
//        o4.setBs_disp_code("001");
//    //    o4.setBsi_disp_cdoe("001");
//        Object[] oo = { o0, o1, o2, o3,o4 };
//
//        String sortProperty = "getEndisp_code,getEn_disp_code,getBs_disp_code222,getBis_disp_code,getBsi_disp_code";
//
//        System.out.println("-------------------排序前------------------");
//        for (int i = 0; i < oo.length; i++) {
//            DD d = (DD) oo[i];
//            System.out.println(d);
//        }
//        System.out.println("-----------------排序处理后----------------");
//        Object[] O = JasperDataSortFilter.sort(oo, sortProperty);
//        for (int i = 0; i < O.length; i++) {
//            DD d = (DD) O[i];
//            System.out.println(d);
//        }
//    }
//
//}
//
//class DD extends BaseObject {
//    String bs_disp_code;
//    //String bsi_disp_code;
//    String bis_disp_code;
//
//    public String getBs_disp_code() {
//        return bs_disp_code;
//    }
//
//    public void setBs_disp_code(String bsDispCode) {
//        bs_disp_code = bsDispCode;
//    }
//
////    public String getBsi_disp_code() {
//    //    return bsi_disp_code;
//    //}
//
////    public void setBsi_disp_cdoe(String bsiDispCode) {
//    //    bsi_disp_code = bsiDispCode;
//    //}
//
//    public String getBis_disp_code() {
//        return bis_disp_code;
//    }
//
//    public void setBis_disp_code(String bisDispCode) {
//        bis_disp_code = bisDispCode;
//    }

}

分享到:
评论

相关推荐

    Vue 通过公共字段,拼接两个对象数组的实例

    在Vue框架中,特别是当我们需要合并带有共同属性的两个对象数组时,可以通过编写方法来实现。本次实例将介绍如何在Vue中通过公共字段拼接两个对象数组。 #### 前提条件 在本例中,前端页面需要展示工资项和对应的...

    vue实现将一个数组内的相同数据进行合并

    文章中提供的代码片段是一个名为`asyncmergeOrder`的函数,它的作用是接收一个订单列表对象数组`orderList`,然后对这个数组进行操作,使数组中价格相同的订单进行合并。合并操作包括价格相同的订单数量相加,并且在...

    java 对象 排序

    返回值表示当前对象相对于另一个对象的顺序。如果结果为负,则当前对象小于另一个;如果结果为零,则它们相等;如果结果为正,则当前对象大于另一个。 - 例如,如果你有一个`Person`类,你可以实现`Comparable...

    js排序方法

    使用这个增强的`by()`函数,我们可以对具有多个属性的对象数组进行复杂排序。例如,对于一个包含`name`和`age`的员工数组,可以这样排序: ```javascript employees.sort(by("age", by("name"))); ``` 总结来说,...

    ExcelVBA方法属性大全

    本资源“ExcelVBA方法属性大全”提供了一个全面的学习指南,包含了VBA中常用的方法和属性,帮助用户深入理解并熟练运用VBA进行编程。 1. **方法**: - `Activate`:激活指定的工作表或窗口。 - `Copy`:复制选定...

    Java数组练习题(带答案).doc

    3. **数组复制时,“=”将一个数组的引用传递给另一个数组** - **知识点**: 在Java中,数组属于对象类型,因此赋值操作实际上是引用的传递,而非值的复制。这意味着两个数组变量将指向同一个内存地址。 4. **JVM...

    java数组的概念和作用.docx

    它属于引用类型的一种,这意味着数组实际上是一个对象。数组可以用来存储基本数据类型(如`int`, `double`, `char`等)或引用数据类型(如自定义的类实例)。例如: ```java int[] numbers = new int[]{1, 2, 3, 4,...

    数据结构与算法 排序

    **排序**是计算机科学中一个基础且重要的概念,它的目标是将一组无序的数据元素排列成一个按关键字(key)有序的序列。排序在数据库管理、数据分析、算法设计等多个领域都有广泛应用。 **数据表(datalist)**是待...

    徐葳《40小时掌握java语言之03面向对象》内部教材

    例如,Java中的数组排序功能,就封装在java.util.Arrays类的sort方法中,这是面向对象思想的一个具体体现。 总之,面向对象编程是一种强大的思想,通过封装、继承和多态三大特征,允许开发者设计和构建出更加清晰、...

    js-大总结(JavaScript对象).

    **定义:** `anchors`数组是`document`对象的一个属性,它包含了文档中所有的`anchor`对象。 **属性:** - **length:** 表示文档内描点的数量。 **用途:** 通过遍历`anchors`数组,可以获取页面中所有描点的信息...

    超级有影响力霸气的Java面试题大全文档

     对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。  Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless ...

    JS数组去重(4种方法)

    最后通过遍历这个对象的所有属性,将对象的属性名(即原数组中的元素)放入到一个新数组中。这种方法避免了使用indexOf的兼容性问题,并且可以通过对象的属性值来判断某个元素出现的次数。这种方法在需要统计元素...

    VB窗口属性中文对照表

    ### VB窗口属性中文对照表详解 #### 一、概述 《VB窗口属性中文对照表》是一份面向初学者的...- **作用**:设置列表框中显示的第一个项目的索引。 ##### TwipsPerPixelX - **中文含义**:屏幕或打印机水平方向的点数...

    JAVA重点知识,面试重点

    - **使用`System.arraycopy`**: 这是一个系统级别的方法,用于复制数组的一部分到另一个数组中。 - **使用`Arrays.copyOf`**: `java.util.Arrays`类提供的方法,可以复制整个数组或数组的一部分到一个新的数组中。...

    web前端面试题.pdf

    它选取一个基准点,将数组分为两部分,一部分所有元素小于基准点,另一部分所有元素大于基准点,然后对这两部分再分别进行快速排序。这个过程通过递归实现。代码中,先找到数组中间的元素作为基准点,然后遍历数组,...

    vb制作小程序:登陆,数组,菜单,货物堆积,调色板等

    在VB中,ColorDialog控件可以提供一个标准的调色板,让用户选择颜色,然后将所选颜色应用于应用程序的元素。这对于设计界面或处理颜色相关的任务非常有用。 通过学习和实践这些VB小程序,开发者可以增强自己的编程...

    NumPy 中文文档.pdf

    5. **广播机制**:广播机制是NumPy中一个重要的概念,它描述了当操作中的两个数组形状不同时,NumPy是如何对较小的数组进行扩展以与较大的数组相匹配。这种机制极大地简化了数组操作的代码,并允许对不同形状的数组...

    在Typescript上编写有用的比较器函数

    例如,对一组对象数组按照它们的`age`属性排序: ```typescript interface Person { name: string; age: number; } function compareByAge(a: Person, b: Person): number { return a.age - b.age; } ``` 四、...

    VB常用属性、方法、事件

    11. **Index**: 如果一个控件有多个实例(例如一个按钮数组),则此属性表示当前对象在数组中的位置。 #### (二) 窗体常用属性 1. **Icon**: 设置最小化窗体时显示的图标。 2. **BorderStyle**: 控制窗体边框的...

    使用jQuery管理选择结果

    jQuery 中的 `.index()` 方法则用于在同级元素中查找元素的位置索引,这个方法接受一个元素作为参数,并返回该元素相对于其同级元素的位置。例如,`$("li").index(someElement)` 会返回 someElement 在所有 li 元素...

Global site tag (gtag.js) - Google Analytics