Как сделать вложенные друг в друга 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 шт):

Автор решения: pazukdev

Может {{}} ?

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 это, конечно, неправильно. Убрал типизацию для лаконичности примера.

→ Ссылка