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中通过公共字段拼接两个对象数组。 #### 前提条件 在本例中,前端页面需要展示工资项和对应的...
文章中提供的代码片段是一个名为`asyncmergeOrder`的函数,它的作用是接收一个订单列表对象数组`orderList`,然后对这个数组进行操作,使数组中价格相同的订单进行合并。合并操作包括价格相同的订单数量相加,并且在...
返回值表示当前对象相对于另一个对象的顺序。如果结果为负,则当前对象小于另一个;如果结果为零,则它们相等;如果结果为正,则当前对象大于另一个。 - 例如,如果你有一个`Person`类,你可以实现`Comparable...
使用这个增强的`by()`函数,我们可以对具有多个属性的对象数组进行复杂排序。例如,对于一个包含`name`和`age`的员工数组,可以这样排序: ```javascript employees.sort(by("age", by("name"))); ``` 总结来说,...
本资源“ExcelVBA方法属性大全”提供了一个全面的学习指南,包含了VBA中常用的方法和属性,帮助用户深入理解并熟练运用VBA进行编程。 1. **方法**: - `Activate`:激活指定的工作表或窗口。 - `Copy`:复制选定...
3. **数组复制时,“=”将一个数组的引用传递给另一个数组** - **知识点**: 在Java中,数组属于对象类型,因此赋值操作实际上是引用的传递,而非值的复制。这意味着两个数组变量将指向同一个内存地址。 4. **JVM...
它属于引用类型的一种,这意味着数组实际上是一个对象。数组可以用来存储基本数据类型(如`int`, `double`, `char`等)或引用数据类型(如自定义的类实例)。例如: ```java int[] numbers = new int[]{1, 2, 3, 4,...
**排序**是计算机科学中一个基础且重要的概念,它的目标是将一组无序的数据元素排列成一个按关键字(key)有序的序列。排序在数据库管理、数据分析、算法设计等多个领域都有广泛应用。 **数据表(datalist)**是待...
例如,Java中的数组排序功能,就封装在java.util.Arrays类的sort方法中,这是面向对象思想的一个具体体现。 总之,面向对象编程是一种强大的思想,通过封装、继承和多态三大特征,允许开发者设计和构建出更加清晰、...
**定义:** `anchors`数组是`document`对象的一个属性,它包含了文档中所有的`anchor`对象。 **属性:** - **length:** 表示文档内描点的数量。 **用途:** 通过遍历`anchors`数组,可以获取页面中所有描点的信息...
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。 Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless ...
最后通过遍历这个对象的所有属性,将对象的属性名(即原数组中的元素)放入到一个新数组中。这种方法避免了使用indexOf的兼容性问题,并且可以通过对象的属性值来判断某个元素出现的次数。这种方法在需要统计元素...
### VB窗口属性中文对照表详解 #### 一、概述 《VB窗口属性中文对照表》是一份面向初学者的...- **作用**:设置列表框中显示的第一个项目的索引。 ##### TwipsPerPixelX - **中文含义**:屏幕或打印机水平方向的点数...
- **使用`System.arraycopy`**: 这是一个系统级别的方法,用于复制数组的一部分到另一个数组中。 - **使用`Arrays.copyOf`**: `java.util.Arrays`类提供的方法,可以复制整个数组或数组的一部分到一个新的数组中。...
它选取一个基准点,将数组分为两部分,一部分所有元素小于基准点,另一部分所有元素大于基准点,然后对这两部分再分别进行快速排序。这个过程通过递归实现。代码中,先找到数组中间的元素作为基准点,然后遍历数组,...
在VB中,ColorDialog控件可以提供一个标准的调色板,让用户选择颜色,然后将所选颜色应用于应用程序的元素。这对于设计界面或处理颜色相关的任务非常有用。 通过学习和实践这些VB小程序,开发者可以增强自己的编程...
5. **广播机制**:广播机制是NumPy中一个重要的概念,它描述了当操作中的两个数组形状不同时,NumPy是如何对较小的数组进行扩展以与较大的数组相匹配。这种机制极大地简化了数组操作的代码,并允许对不同形状的数组...
例如,对一组对象数组按照它们的`age`属性排序: ```typescript interface Person { name: string; age: number; } function compareByAge(a: Person, b: Person): number { return a.age - b.age; } ``` 四、...
11. **Index**: 如果一个控件有多个实例(例如一个按钮数组),则此属性表示当前对象在数组中的位置。 #### (二) 窗体常用属性 1. **Icon**: 设置最小化窗体时显示的图标。 2. **BorderStyle**: 控制窗体边框的...
jQuery 中的 `.index()` 方法则用于在同级元素中查找元素的位置索引,这个方法接受一个元素作为参数,并返回该元素相对于其同级元素的位置。例如,`$("li").index(someElement)` 会返回 someElement 在所有 li 元素...