Я работаю с API, который хранит данные только в определенном формате, и то, как я программировал, кажется чрезмерным. Есть ли более простой способ?

#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 класс с конфигурационной картой?