All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.gridgo.utils.pojo.getter.fieldwalkers.MapFieldWalker Maven / Gradle / Ivy

package io.gridgo.utils.pojo.getter.fieldwalkers;

import java.util.Map;

import static io.gridgo.utils.pojo.PojoFlattenIndicator.END_MAP;
import static io.gridgo.utils.pojo.PojoFlattenIndicator.KEY;
import static io.gridgo.utils.pojo.PojoFlattenIndicator.KEY_NULL;
import static io.gridgo.utils.pojo.PojoFlattenIndicator.START_MAP;
import static io.gridgo.utils.pojo.PojoFlattenIndicator.VALUE;

import io.gridgo.utils.pojo.getter.PojoFlattenAcceptor;
import io.gridgo.utils.pojo.getter.PojoGetterProxy;

public class MapFieldWalker extends AbstractFieldWalker {

    private static final MapFieldWalker INSTANCE = new MapFieldWalker();

    public static MapFieldWalker getInstance() {
        return INSTANCE;
    }

    private MapFieldWalker() {
        // Nothing to do
    }

    @Override
    public void walk(Object target, PojoGetterProxy proxy, PojoFlattenAcceptor walker, boolean shallowly) {
        var map = (Map) target;
        int size = map.size();
        walker.accept(START_MAP, size, null, null);
        var it = map.entrySet().iterator();
        while (it.hasNext()) {
            var entry = it.next();
            var key = entry.getKey();
            var value = entry.getValue();

            if (value == null) {
                walker.accept(KEY_NULL, key, null, proxy);
            } else {
                walker.accept(KEY, key, null, null);
                if (shallowly) {
                    walker.accept(VALUE, value, null, proxy);
                } else {
                    walkRecursive(value, proxy, walker, shallowly);
                }
            }
        }
        walker.accept(END_MAP, size, null, null);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy