要么庸俗,要么孤独——叔本华
前两天遇到一个坑,当时我通过使用getDeclaredFields()函数获取对象属性时发现一个问题:
获取到的属性的顺序不对,结果我自己一看介绍

原来,它是无序的
所以我们为了解决这个问题
首先自定义一个注解用于制定排序规则
| package com.ruben.annotation;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 
 
 
 
 
 
 
 
 
 @Target(ElementType.FIELD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface BeanFieldSort {
 
 
 
 
 
 int order();
 }
 
 | 
然后在需要排序的bean上加上这个注解
| package com.ruben.pojo;
 import com.ruben.annotation.BeanFieldSort;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 
 
 
 
 
 
 
 
 
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
 public class UserInfo {
 @BeanFieldSort(order = 5)
 private String phoneNumber;
 @BeanFieldSort(order = 4)
 private String address;
 @BeanFieldSort(order = 3)
 private String qqNumber;
 @BeanFieldSort(order = 2)
 private String wxNumber;
 @BeanFieldSort(order = 1)
 private String weiboNumber;
 }
 
 | 
最后是排序的方法,这里使用java8的stream流
| package com.ruben;
 import com.ruben.annotation.BeanFieldSort;
 import com.ruben.pojo.UserInfo;
 
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 
 
 
 
 
 
 
 
 
 
 public class FieldDemo {
 public static void main(String[] args) throws IllegalAccessException, InstantiationException {
 
 Class<UserInfo> userInfoClass = UserInfo.class;
 
 UserInfo userInfo = userInfoClass.newInstance();
 System.out.println(userInfo);
 
 Field[] fields = userInfoClass.getDeclaredFields();
 
 for (Field field : fields) {
 
 field.setAccessible(true);
 field.set(userInfo, "yeah!");
 System.out.println(field.getName());
 }
 System.out.println("------------");
 
 List<Field> fieldList = Arrays
 .stream(fields)
 .sorted(Comparator.comparingInt(f -> f
 .getAnnotation(BeanFieldSort.class).order()))
 .collect(Collectors.toList());
 
 fieldList.stream().map(Field::getName).forEach(System.out::println);
 System.out.println(userInfo);
 }
 }
 
 | 
输出结果为

可以看到排序前和排序后的结果
关键就是这一句
| List<Field> fieldList = Arrays.stream(fields).sorted(Comparator.comparingInt(f -> f.getAnnotation(BeanFieldSort.class).order())).collect(Collectors.toList());
 | 
在sorted()函数中传入排序规则
就是这样啦,希望对大家有所帮助