通用对象按属性排序功能

通用对象按属性排序类

CompareUtil.java

public class CompareUtil<T> implements Comparator<T> {

private ArrayList<SortItem> sortItemList = new ArrayList<SortItem>();

private class SortItem {

public String fieldName;

public String sortType;

public boolean isAsc;

}

@Override

public int compare(T arg0, T arg1) {

// TODO Auto-generated method stub

int result = 0;

for (int i = 0; i < sortItemList.size(); i++) { // 多个属性比较

SortItem tempItem = sortItemList.get(i);

if (tempItem.sortType.contains("String")) { // 字符串比较

String s1 = getFieldValueByName(arg0, tempItem.fieldName).toString();

String s2 = getFieldValueByName(arg1, tempItem.fieldName).toString();

if (tempItem.isAsc) { // 升序

result = ascStr(s1, s2);

if (result != 0) { // 已经比较出大小

return result;

}

} else {

result = descStr(s1, s2);

if (result != 0) {

return result;

}

}

} else { // 整数比较

int s1 = 0;

try {

s1 = Integer.parseInt(String.valueOf(getFieldValueByName(arg0, tempItem.fieldName)));

} catch (Exception e) {

// TODO: handle exception

}

int s2 = 0;

try {

s2 = Integer.parseInt(String.valueOf(getFieldValueByName(arg1, tempItem.fieldName)));

} catch (Exception e) {

// TODO: handle exception

}

if (tempItem.isAsc) { // 升序

result = ascInt(s1, s2);

if (result != 0) {

return result;

}

} else {

result = descInt(s1, s2);

if (result != 0) {

return result;

}

}

}

}

return 0;

}

/**

* 添加排序条件

* @param fieldName 排序属性名

* @param sortType 按什么类型排序

* @param isAsc 是否是升序

* @return

*/

public CompareUtil<T> addSort(String fieldName, String sortType, boolean isAsc) {

SortItem item = new SortItem();

item.fieldName = fieldName;

item.sortType = sortType;

item.isAsc = isAsc;

sortItemList.add(item);

return this;

}

/**

* 获取指定名称的域值

* @param obj 获取数据的对象

* @param fieldName 获取数据的域名

* @return

*/

private Object getFieldValueByName(Object obj, String fieldName) {

try {

String Letter = fieldName.substring(0, 1).toUpperCase();

String methodStr = "get" + Letter + fieldName.substring(1);

Method method = obj.getClass().getMethod(methodStr, new Class[] {});

return method.invoke(obj, new Object[] {});

} catch (Exception e) {

return null;

}

}

/**

* 升序

* @param s1

* @param s2

* @return

*/

private int ascInt(int s1, int s2) {

if (s1 > s2) {

return -1;

} else if (s1 < s2) {

return 1;

} else {

return 0;

}

}

/**

* 降序

* @param s1

* @param s2

* @return

*/

private int descInt(int s1, int s2) {

if (s1 > s2) {

return 1;

} else if (s1 < s2) {

return -1;

} else {

return 0;

}

}

/**

* 升序

* @param s1

* @param s2

* @return

*/

private int ascStr(String s1, String s2) {

if (s1.compareToIgnoreCase(s1) > 0) {

return -1;

} else if (s1.compareToIgnoreCase(s2) < 0) {

return 1;

} else {

return 0;

}

}

/**

* 降序

* @param s1

* @param s2

* @return

*/

private int descStr(String s1, String s2) {

if (s1.compareToIgnoreCase(s2) > 0) {

return 1;

} else if (s1.compareToIgnoreCase(s2) < 0) {

return -1;

} else {

return 0;

}

}

}

使用方法:

public class MainActivity extends Activity {

private ArrayList<Person> arrayDemo = new ArrayList<Person>();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViews();

initValues();

initListeners();

}

private void initViews() {

}

private void initValues() {

initData();

print();

CompareUtil<Person> comparator = new CompareUtil<Person>();

comparator.addSort("name", String.class.getName(), false);

comparator.addSort("age", Integer.class.getName(), false);

Collections.sort(arrayDemo, comparator);

print();

}

private void initListeners() {

}

private void print() {

for (int i = 0; i < arrayDemo.size(); i++) {

Log.i("test", arrayDemo.get(i).toString());

}

Log.i("test", "11111111111111111111111111111111111");

}

private void initData() {

Person p1 = new Person();

p1.setName("zhang san");

p1.setAge("22");

p1.setSalary(160);

Person p2 = new Person();

p2.setName("zhang san");

p2.setAge("28");

p2.setSalary(150);

Person p3 = new Person();

p3.setName("zhang san");

p3.setAge("25");

p3.setSalary(1900);

Person p4 = new Person();

p4.setName("zhao liu");

p4.setAge("32");

p4.setSalary(3000);

Person p5 = new Person();

p5.setName("liu qi");

p5.setAge("30");

p5.setSalary(2000);

arrayDemo.add(p1);

arrayDemo.add(p2);

arrayDemo.add(p3);

arrayDemo.add(p4);

arrayDemo.add(p5);

}

}

Person.java

public class Person {

private String name;

private String age;

private long salary;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

public long getSalary() {

return salary;

}

public void setSalary(long salary) {

this.salary = salary;

}

@Override

public String toString() {

return "Person [name=" + name + ", age=" + age + ", salary=" + salary + "]";

}

}

时间: 2024-11-06 09:19:45

通用对象按属性排序功能的相关文章

java 对list中对象按属性排序

实体对象类 --略 排序类----实现Comparator接口,重写compare方法 package com.tang.list; import java.util.Comparator; public class Mycompera implements Comparator<Student> { @Override    public int compare(Student o1, Student o2) {        if (o1.getSid() > o2.getSid()

javascript: object对象按属性排序的方法

javascript中在使用ajax和服务端交互时会遇到这样的场景,服务端返回json格式数据,前端展示时需要对数据进行某种排序,比如升序.降序. 可以利用 sort() 自定义排序规则来实现,例如返回的一段json数据,按照年龄升序排列. 1 var res = { 2 success: true, 3 result: [ 4 { 5 id: 1, 6 name: 'Jack', 7 age: 21 8 }, 9 { 10 id: 2, 11 name: 'Tom', 12 age: 23 1

JAVA实现根据对象的属性排序--BeanComparator,FixedOrderComparator,ComparatorChain

最近看到这样一段排序的代码. public static List<?> getBrandOrderList(List<?> list, String Field) { String[] brandArr = {"7天", "7天优品", "IU", "派", "麗枫", "喆啡", "希岸", "欢朋", "潮漫

根据对象的属性排序数组

根据对象的年龄排序. var boy = [{ name: "jiang", age: 22 }, { name: "AAAAAAAAAAAAAA", age: 21 }, { name: "CCCCCCCCc", age: 25 }]; function compare(propertyName) { return function(object1, object2) { var value1 = object1[propertyName];

List数据集按对象某个属性排序

//按代号进行升序排序(要判断代号是否为空,不然会报错)                    RowItems1.Sort(delegate(RowData x, RowData y)                    {                        if (string.IsNullOrEmpty(x.code) && string.IsNullOrEmpty(y.code))                        {                   

冒泡排序之如何根据对象一个属性排序

这个真的非常常用,尤其是做习题的时候,今天算是明白,其实很简单,但是真是面向对象的概念还没理解到位,另外,类真的很神奇,可以是数组类型,继续做题. package com.company; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import javax.sound.midi.Soundbank; public class Main { //经典冒泡排序 public static

JS中对象按属性排序

在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据json中某一项进行数组的排序. 例如返回的数据结构大概是这样: { result:[ {id:1,name:'中国银行'}, {id:3,name:'北京银行'}, {id:2,name:'河北银行'}, {id:10,name:'保定银行'}, {id:7,name:'涞水银行'} ] } 现在我们根据业务需要,要根据id的大小进行排序,按照id小的json到id大的json顺序重新排列数组的顺序 在js中添

java根据list中的对象某个属性排序

public class Test { public static void main(String[] args) throws Exception { CityModel city1 = new CityModel(); city1.setCity_code(1); CityModel city2 = new CityModel(); city2.setCity_code(1); CityModel city3 = new CityModel(); city3.setCity_code(1)

java 根据对象属性排序

在项目中经常会遇到这杨的情况,在数据中取到的 一个list集合我们需要这个集合是按我们想要的顺序排列 当然你说这可以用数据库order by 就能搞定,ok我们说的用java代码.若你已经选择要使用数据库了请绕行! 好吧居然你选择了往下继续OK 就进入代码吧, ok之前我遇到这样的需求的时候为了简单也使用过数据库来做,后来数据库查询的sql越来越复杂之后就想用j ava来帮帮数据库减轻一下压力."毕竟,压力来自轮胎,就算跳到250P,FC 的马力还是太大,难以做到最大限度的飘逸". 我