Frage

I have the following structure:

import java.util.LinkedHashMap;
...
LinkedHashMap <String, Object>level0 = new LinkedHashMap<String, Object>();
LinkedHashMap <String, Object>level1 = new LinkedHashMap<String, Object>();
LinkedHashMap <String, Object>level2 = new LinkedHashMap<String, Object>();
LinkedHashMap <String, Object>level3 = new LinkedHashMap<String, Object>();

level1.put("level2", level2);
level2.put("level2", level3);

level0.put("level1", level1);

System.out.println(level0);

Output this:

{
    level1={
        level2={}
    }
}

I need to set a value through a "path" (or something), would be something like this:

MapThisObject example = new MapThisObject(level0);
example.putValue("level1.level2", "string", "test");
example.putValue("level1.level2", "int", 1);
example.putValue("level1.level2", "object", new LinkedHashMap());

System.out.println(example.result());
/*output:
{
    level1={
        level2={
            string="test",
            int=1,
            Object={}
        }
    }
}
*/

In other words, there is the possibility to put or set values ​​for "multidimensional objects" through a "path" (like Xpath)?

War es hilfreich?

Lösung

A simple example

public static void set(Map<String, Object> map, String path, Object value) {
    String[] parts = path.split("\\.");
    for(int i = 0; i < parts.length-1 ; i++) {
        String key = parts[i];
        Map<String, Object> map2 = (Map<String, Object>) map.get(key);
        if (map2 == null) {
            map.put(key, map2 = new LinkedHashMap<String, Object>());
        }
        map = map2;
    }
    map.put(parts[parts.length - 1], value);
}

set(example, "level1.level2.string", "test");
set(example, "level1.level2.int", 1);

Andere Tipps

From what you've described, it sounds like all you need is a map containing maps, nested to however many axes you're trying to select from.

The alternative would be to build your own tree structure, of course. Or to express it as an XML DOM tree, which would let you use standard XPath.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top