Просто в стороне (я бы сделал это комментарий, но я думаю, что это будет немного долго) ...
Программисту очень приятно иметь возможность получить одну концептуальную операцию в одной строке. Программисту (в то время) он кажется более читаемым, логичным и просто правильным.
Это почти никогда не бывает хорошо. С одной стороны, позже будет сложнее разобрать, чем две строки - даже если ваша внутренняя реакция сейчас такова, что она более читабельна. Также - чем больше операций в одной строке, тем сложнее отлаживать.
Для удобства чтения я бы сказал, что решение Generics - это примерно столько же, сколько я бы поставил в одну строку - для решения для литья я бы разбил его на две строки; Я также разбил бы его на несколько строк, если бы один из параметров был операцией, а не просто переменной.
Я знаю, что многие люди не согласятся с этим и, скажу вам правду, сначала я склоняюсь к одной строке, но я заметил, что при первых признаках неприятностей или каких-либо путаница облегчает мою жизнь, разбивая все на отдельные утверждения с четко названными переменными.
По крайней мере, так же важно - в случаях с вложенными коллекциями я часто также оборачиваю коллекции в другой объект. Это было бы интересно в вашем случае - вызов станет немного более понятным.
dataHolder.put(category, newKey, newVale);
Скрывает механизм вложения коллекций (который в противном случае может быть сложным для запоминания правильно и легко испортить) и делает ваши намерения намного более ясными.
Этот шаблон оборачивания (не расширяющий, но инкапсулирующий) вложенных коллекций поначалу кажется странным, но я действительно советую вам просто попробовать - он действительно очищает много кода, делает все намного безопаснее, добавляет понимание каждому, изменения «Коллекция» в бизнес-объекте (где вы можете разместить бизнес-методы - рефакторинг вы оцените почти сразу), и он просто помогает всему вашему коду.