根据指定字段对数组排序
- 简介 (Introduction):
1、 处理一个数组的数据
2、 根据对象的某个字段的值, 进行排序操作
- 快速上手 (Getting Started):
数据模型
1 [{ 2 "name": "name3", 3 "age": "03", 4 "sex": "03", 5 "recodeNumber": 3 6 }, { 7 "name": "name2", 8 "age": "02", 9 "sex": "02", 10 "recodeNumber": 2 11 }, { 12 "name": "name4", 13 "age": "04", 14 "sex": "04", 15 "recodeNumber": 4 16 }, { 17 "name": "name1", 18 "age": "01", 19 "sex": "01", 20 "recodeNumber": 1 21 }, { 22 "name": "name5", 23 "age": "05", 24 "sex": "05", 25 "recodeNumber": 5 26 }]
1、 实体类建立
1 package demo.pojo; 2 3 public class Field { 4 5 /** 6 * 名称 7 */ 8 private String name; 9 10 /** 11 * 年龄 12 */ 13 private String age; 14 15 /** 16 * 性别 17 */ 18 private String sex; 19 20 /** 21 * 字段序号 22 */ 23 private int recodeNumber; 24 25 26 public String getName() { 27 return name; 28 } 29 30 public void setName(String name) { 31 this.name = name; 32 } 33 34 public String getAge() { 35 return age; 36 } 37 38 public void setAge(String age) { 39 this.age = age; 40 } 41 42 public String getSex() { 43 return sex; 44 } 45 46 public void setSex(String sex) { 47 this.sex = sex; 48 } 49 50 public int getRecodeNumber() { 51 return recodeNumber; 52 } 53 54 public void setRecodeNumber(int recodeNumber) { 55 this.recodeNumber = recodeNumber; 56 } 57 }
2、 创建数据
1 private static List<Field> getDemoData() { 2 List<Field> fieldList = new LinkedList<>(); 3 4 Field field = new Field(); 5 6 field.setAge("0" + 3); 7 8 field.setName("name" + 3); 9 10 field.setRecodeNumber(3); 11 12 field.setSex("0" + 3); 13 14 fieldList.add(field); 15 16 17 Field field2 = new Field(); 18 19 field2.setAge("0" + 2); 20 21 field2.setName("name" + 2); 22 23 field2.setRecodeNumber(2); 24 25 field2.setSex("0" + 2); 26 27 fieldList.add(field2); 28 29 30 Field field4 = new Field(); 31 32 field4.setAge("0" + 4); 33 34 field4.setName("name" + 4); 35 36 field4.setRecodeNumber(4); 37 38 field4.setSex("0" + 4); 39 40 fieldList.add(field4); 41 42 43 Field field1 = new Field(); 44 45 field1.setAge("0" + 1); 46 47 field1.setName("name" + 1); 48 49 field1.setRecodeNumber(1); 50 51 field1.setSex("0" + 1); 52 53 fieldList.add(field1); 54 55 Field field5 = new Field(); 56 57 field5.setAge("0" + 5); 58 59 field5.setName("name" + 5); 60 61 field5.setRecodeNumber(5); 62 63 field5.setSex("0" + 5); 64 65 fieldList.add(field5); 66 67 68 return fieldList; 69 }
3、 核心方法
1 /** 2 * 根据指定字段对对象进行排序 3 * 4 * @param fieldList 存放对象的数组 5 * @param sortType 是升序还是降序,1:升序,-1降序 6 * @return 排序后的数组 7 */ 8 public static List<demo.pojo.Field> sortList(List<demo.pojo.Field> fieldList, int sortType) { 9 10 11 if (sortType == -1) { 12 13 fieldList.sort(new Comparator<demo.pojo.Field>() { 14 15 /** 16 * 重写方法,按照指定字段排序 17 * @param o1 第一个对象 18 * @param o2 第二个对象 19 * @return 比较结果 20 */ 21 @Override 22 public int compare(demo.pojo.Field o1, demo.pojo.Field o2) { 23 24 if (o2.getRecodeNumber() - o1.getRecodeNumber() > 0) { 25 return 1; 26 } else if (o2.getRecodeNumber() - o1.getRecodeNumber() < 0) { 27 return -1; 28 } else { 29 return 0; 30 } 31 32 } 33 }); 34 35 } else if (sortType == 1) { 36 fieldList.sort(new Comparator<demo.pojo.Field>() { 37 38 /** 39 * 重写方法,按照指定字段排序 40 * @param o1 第一个对象 41 * @param o2 第二个对象 42 * @return 比较结果 43 */ 44 @Override 45 public int compare(demo.pojo.Field o1, demo.pojo.Field o2) { 46 47 if (o1.getRecodeNumber() - o2.getRecodeNumber() > 0) { 48 return 1; 49 } else if (o1.getRecodeNumber() - o2.getRecodeNumber() < 0) { 50 return -1; 51 } else { 52 return 0; 53 } 54 } 55 }); 56 } 57 58 return fieldList; 59 }
4、 测试
1 public static void main(String[] args) { 2 3 List<Field> fieldList = getDemoData(); 4 5 // 打印当前数组样式 6 System.out.println("排序前:" + new Gson().toJson(fieldList)); 7 8 // 升序排序 9 fieldList = ListUtils.sortList(fieldList, 1); 10 11 System.out.println("排序后:" + new Gson().toJson(fieldList)); 12 13 14 }
- 环境准备 (Prerequisite):
JDK1 .8
- 安装 (Installation):
IDEA 2019
- 存在问题 (Configuration):
暂无
- 进阶篇 (Advanced):
待续......
十年磨一剑,一剑破万法