ObjectEach.java 1.63 KB
Newer Older
yanzg's avatar
yanzg committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
package com.yanzuoguang.util.base;

import com.yanzuoguang.util.helper.StringHelper;

import java.util.HashMap;
import java.util.Map;

/**
 * 遍历对象和值
 *
 * @author 颜佐光
 */
public class ObjectEach {
    /**
     * 遍历对象
     *
     * @param target   对象
     * @param consumer 消费者,其中包含名称,值,方法(map时为空)
     */
    public static void each(Object target, ObjectEachItem<String, Object, MethodField> consumer) {
yanzg's avatar
yanzg committed
21 22
        if (target instanceof Map<?,?>) {
            eachMap((Map<?,?>) target, consumer);
yanzg's avatar
yanzg committed
23 24 25 26 27 28 29 30 31 32 33
        } else {
            eachObject(target, consumer);
        }
    }

    /**
     * 遍历map对象
     *
     * @param target   目标对象
     * @param consumer 遍历的字段,值,方法
     */
yanzg's avatar
yanzg committed
34
    private static void eachMap(Map<?,?> target, ObjectEachItem<String, Object, MethodField> consumer) {
yanzg's avatar
yanzg committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
        for (Object key : target.keySet()) {
            Object fromValue = target.get(key);
            consumer.accept(StringHelper.toString(key), fromValue, null);
        }
    }

    /**
     * 遍历对象
     *
     * @param target   目标对象
     * @param consumer 遍历的字段,值,方法
     */
    private static void eachObject(Object target, ObjectEachItem<String, Object, MethodField> consumer) {
        HashMap<String, MethodField> mapField = ObjectHelper.getTypeField(target.getClass());
        for (Map.Entry<String, MethodField> field : mapField.entrySet()) {
            String name = field.getValue().getName();
            Object fromValue = ObjectHelper.get(target, name);
            consumer.accept(name, fromValue, field.getValue());
        }
    }
}