Как сделать вложенные друг в друга LinkedHashMap оптимальным способом?
Суть: получаю ответ JSON и кастую его к LinkedHashMap (далее ЛХМ). Получается, чтобы достать нужный параметр, я в каждом ЛХМ по ключу беру следующий ЛХМ и так до конца, пока не доберусь до нужного значения. Далее, мне нужно СОЗДАТЬ такой многослойный ЛХМ для тестирования, т.е. симулировать ответ полученный от сервиса. Если делать это в лоб, получается много кода:
LinkedHashMap lhmResponse = new LinkedHashMap();
LinkedHashMap data = new LinkedHashMap();
LinkedHashMap images = new LinkedHashMap();
LinkedHashMap original = new LinkedHashMap();
original.put("url", "test");
images.put("original", original);
data.put("images", images);
lhmResponse.put("data", data);
так работает, всё ОК, но много букаф. второй способ:
lhmResponse.put("data", new LinkedHashMap()
.put("images", new LinkedHashMap()
.put("original", new LinkedHashMap()
.put("url", "test"))));
компилируется, но при распечатке toString - data=null. Вопрос: можно ли починить второй способ, или как написать оптимально такую сборку. Первый способ слишком громоздкий и возникает проблема, что мне надо два вложенных ЛХМ, но отличающихся последним значением, и тогда при изменении значение меняется в обоих ЛХМ. Приходится по первому способу создавать в 2 раза больше ЛХМ-ов.
ПС(ЗЫ): ДТО не предлагать, не хочу возиться с ломбоком, он только мне геморроя добавил. Всем спасибо!
Ответы (1 шт):
Может {{}} ?
Map lhmResponse = new LinkedHashMap() {{
put("data", new LinkedHashMap() {{
put("images", new LinkedHashMap() {{
put("original", new LinkedHashMap() {{
put("url", "test");
}});
}});
}});
}};
toString():
{data={images={original={url=test}}}}
PS Только Raw Type это, конечно, неправильно. Убрал типизацию для лаконичности примера.