#java #data-structures #minecraft
#java #структуры данных #Minecraft
Вопрос:
Я работаю с API Spigot (для плагинов Minecraft). При сохранении конфигураций есть возможность сохранить список < Map< ?, ? > > . Чтобы структура данных выглядела так:
Элемент
- Ключ: значение
- Ключ: значение
- Ключ: значение
Я хочу иметь возможность сохранять информацию о конфигурации, относящуюся к конкретным пользователям. Мне нужна структура данных, которая выглядит следующим образом:
Пользователи
- Пользователь1
- Установка 1: значение
- Установка 2: значение
- Пользователь2
- Установка 1: значение
- Установка 2: значение
- Пользователь3
- Установка 1: значение
- Установка 2: значение
Код, который я писал, совершенно отвратителен. Я сделал его более читаемым, удалив подстановочные знаки, но вот он:
List<Map<String, Map<String, String>>> users = new ArrayList<Map<String, Map<String, String>>>();
Map<String, Map<String, String>> justin = new HashMap<String, Map<String, String>>() {{}};
for (Map<String, String> config : justin.values()) {
config.put("key1", "value1");
config.put("key2", "value2");
config.put("key3", "value3");
}
Map<String, Map<String, String>> not_justin = new HashMap<String, Map<String, String>>() {{}};
for (Map<String, String> config : not_justin.values()) {
config.put("key1", "value1");
config.put("key2", "value2");
config.put("key3", "value3");
}
users.add(justin);
users.add(not_justin);
}
Когда я пытаюсь распечатать это, я получаю это как результат:
[{}, {}]
Я пробовал перебирать все и до сих пор не получаю никаких фактических значений. Итак, мои два вопроса
а) есть ли более простой способ сделать это, о котором я забываю
б) если нет, почему мой код не печатается?
Спасибо,
Джастин
Комментарии:
1. а) Вы можете сделать свой код более чистым, используя алмазную нотацию . б) Почему вы создаете с пустыми блоками инициализации (
{{}}
)? c)justin
иnot_justin
оба пустые. Почему вы ожидаете, что ваши циклы будут что-то делать?2. @shmosel, а) единственный способ инициализировать HashMap — это инициализировать его как новый класс, который наследует HashMap б) для конфигурации установлено значение justin.values(), которое (согласно JavaDocs) использует серверную часть HashMap, поэтому изменения, внесенные в него, изменят сам «justin»
3.
config
ссылался бы на каждое значение по очереди,justin
если бы оно не было пустым. Но в этом случаеjustin
пусто, поэтому цикл не выполняется.4. Я понял это: я идиот, который допустил простую ошибку. Я перебирал значения ‘justin’, когда их не было. Простите за мой идиотизм.
5. Что касается чистоты, кажется, вы пытаетесь сделать слишком много со структурами данных. Почему бы не иметь
User
класс с конфигурационной картой?