List<T> 属性排序
来源:互联网 发布:js判断display none 编辑:程序博客网 时间:2024/06/06 02:58
0.背景
由于需要,按照不同字段对List中对象进行排序,就学习了下反射和JDK中相关接口就写了个排序工具类。目前支持对象属性排序:字符串类型,Integer、Long基本类型的排序。如果需要其它类型比较可以根据自己需求进行扩展。
1
public class ListSortUtil { private static Object getValue(Object ob, final String strField) { try { Field field = ob.getClass().getDeclaredField(strField); field.setAccessible(true); return field.get(ob); } catch (Exception ex) { System.out.print(ex.getMessage()); } return null; } /** * field 是要排序的字段 * 默认是升序,只能比较字符串和Integer和Long */ public static <T> void sort(List<T> src, final String field, final OrderType orderType) { Collections.sort(src, new Comparator<T>() { @Override public int compare(T o1, T o2) { Object value1 = getValue(o1, field); Object value2 = getValue(o2, field); if (value1 == null || value2 == null) { throw new RuntimeException("field字段为空"); } int value = 0; if (value1 instanceof String || value2 instanceof String) { value = String.valueOf(value1).compareTo(String.valueOf(value2)); } else if ((value1 instanceof Integer || value1 instanceof Long) && (value2 instanceof Integer || value2 instanceof Long)) { value = Long.valueOf(value1.toString()).compareTo(Long.valueOf(value2.toString())); } if (OrderType.DESC.equals(orderType)) { return -value; } return value; } }); }}
升序或者降序的枚举类
public enum OrderType { DESC(1, "降序"), ASC(2, "升序"); /** * 类型值 */ private Integer value; /** * 描述 */ private String desc; private OrderType(Integer value, String desc) { this.value = value; this.desc = desc; } public Integer getValue() { return value; } public String getDesc() { return desc; }}
bean对象
public class Student { private String name; private Integer age; public Student(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; }}
测试程序
public class TestMain { public static void main(String[] args) { List<Student> students=new ArrayList(); students.add(new Student("abc",15)); students.add(new Student("bac",19)); students.add(new Student("aac",18)); System.out.println("--按照age降序---"); ListSortUtil.sort(students,"age",OrderType.DESC); print(students); System.out.println("--按照name升序---"); ListSortUtil.sort(students,"name",OrderType.ASC); print(students); } public static void print(List<Student> students) { for(Student student:students) { System.out.println(student.toString()); } }}
输出:
--按照age降序---Student{name='bac', age=19}Student{name='aac', age=18}Student{name='abc', age=15}--按照name升序---Student{name='aac', age=18}Student{name='abc', age=15}Student{name='bac', age=19}
0 0
- List<T> 属性排序
- List<T> 按某属性排序
- java 根据 List<T> 的属性进行排序
- C# List<T>排序
- List<T>排序
- Jquery List<T>排序
- List<T>排序
- List<T> 排序
- List<T> 排序
- JAVA:List<T> 排序
- Android List<T> 排序
- list<T>排列 排序
- 关于Comparable<T>解决List<bean>,依据bean的某个属性对list进行排序
- 泛型List<T>方法属性
- 对List<T> 随机排序
- C# List<T>.Sort排序
- List<T> 查询 linq 排序
- List<T> 排序问题分享
- SQLite 3 中的数据类型
- Java 检查字符串是否为空
- 欢迎使用CSDN-markdown编辑器
- keras, tensorflow, jupyter的虚拟环境安装, using virtulaenv
- springSecurity随笔
- List<T> 属性排序
- 十年京东,十年技术发展—畅读《京东技术解密》
- Android Studio常用快捷键汇总
- 51nod 1405 树的距离之和 【dfs--记忆dp??树形dp??】
- mark down 使用
- hibernate系列笔记(1)---Hibernate增删改查
- JavaScript 基础
- [转]PAT甲级练习1105. Spiral Matrix (25)
- 从JVM内存模型谈线程安全