清除list空值

如果List包含复杂对象则清除复杂对象里面List空值

isBaseType()方法在https://blog.csdn.net/lightofsms/article/details/86715129

  • 反射依赖


<dependency>
    <groupId>com.esotericsoftwaregroupId>
    <artifactId>reflectasmartifactId>
    <version>1.11.7version>
dependency>
import com.esotericsoftware.reflectasm.MethodAccess;

import static xxx.xxx.xxx.TAG_THIS; // this 字符串
import static xxx.xxx.xxx.isBaseType;

public class ListUtil {
    /**
     * 清除list里面的null元素
     * @param obj
     */
    public static void cleanNull(Object obj) {
        if (obj == null) {
            return;
        }
        // 如果obj数据Collection家族
        if (obj instanceof Collection) {
            Collection collection = (Collection) obj;
            collection.removeIf(Objects::isNull);
            // 递归遍历
            for (Object o : collection) {
                cleanNull(o);
            }
        } else if (obj instanceof Map) {
            // 如果数据属于Map家族
            ((Map) obj).forEach((key, value) -> cleanNull(value));
        } else if (!isBaseType(obj.getClass(), true)) {
            MethodAccess methodAccess = MethodAccess.get(obj.getClass());
            for (Field field : obj.getClass().getDeclaredFields()) {
                if (!isBaseType(field.getType(), true)) {
                    String fieldName = field.getName();
                    if (!fieldName.startsWith(TAG_THIS+"$")) {
                        cleanNull(methodAccess.invoke(obj, "get" + StringUtils.capitalize(fieldName),  null));
                    }
                }
            }
        }
    }
}

你可能感兴趣的:(java)