In der Vergangenheit habe ich das einfach mit einer verschachtelten Karte gemacht. Das ist das, was ich heute benutze, es ist sehr einfach, aber es entspricht meinen Bedürfnissen. Vielleicht hilft es einem anderen.
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/**
* Erstellt von kic am 16.07.15.
*/
public class NestedMap {
private final Map root = new HashMap<>();
public NestedMap put(K key) {
Object nested = root.get(key);
if (nested == null || !(nested instanceof NestedMap)) root.put(key, nested = new NestedMap<>());
return (NestedMap) nested;
}
public Map.Entry put(K key, V value) {
root.put(key, value);
return (Map.Entry) root.entrySet().stream().filter(e -> ((Map.Entry) e).getKey().equals(key)).findFirst().get();
}
public NestedMap get(K key) {
return (NestedMap) root.get(key);
}
public V getValue(K key) {
return (V) root.get(key);
}
@JsonValue
public Map getRoot() {
return root;
}
public static void main(String[] args) throws Exception {
NestedMap test = new NestedMap<>();
test.put("a").put("b").put("c", 12);
Map.Entry foo = test.put("a").put("b").put("d", 12);
test.put("b", 14);
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(test));
foo.setValue(99);
System.out.println(mapper.writeValueAsString(test));
System.out.println(test.get("a").get("b").getValue("d"));
}
}