Android, получить значения из карты в объект с заданным классом - PullRequest
0 голосов
/ 09 апреля 2019

Я получаю свои данные из Firestore и сохраняю их в строку Map, объект.
Данные выглядят так:

[auto-generated key]
    fieldname: value
    fieldname: value
...

Может быть любое количество полей, они могут быть названы в любом месте и хранить номера / текст / метки времени.
Я получаю их на карту, как это:

Map<String, Object> myMap = new HashMap<>();

for (QueryDocumentSnapshot document : task.getResult()) {            
    myMap.put(document.getId(), document.getData());
}

Что я хочу сделать :
У меня есть класс для данных, я хочу сохранить их в списке, с этим типом.

public class DemoData {
    public String autoId;
    public List<String> fieldNames;
    public List<Object> values;

    public DemoData() {}
}

Итак, вот код, который у меня сейчас есть :
Я могу получить список ключей и список пар имя-значение-значение.

List<String> k = new ArrayList<>();
List<Object> v = new ArrayList<>();

for (Map.Entry<String, Object> entry : map.entrySet()) {
    k.add(entry.getKey());
    v.add(entry.getValue());
}

(похоже):
enter image description here

Как я могу перейти в список "v", к каждой паре каждого поля имя-значение и сохранить их в два отдельных списка. (а затем формировать из них объект DemoData).

Итак, объект DemoData будет выглядеть так:

autoId: "YbWQh..."
fieldNames: ["default", "entity_name", "Datum", "fav"...]
values: [false,"Fontos datumok", Timestamp..., false...]

1 Ответ

2 голосов
/ 09 апреля 2019

List имеет конструктор, который принимает любую структуру данных, которая реализует интерфейс CollectionMap есть методы, которые возвращают все ключи и значения одновременно в Set, который реализует интерфейс Collection.Вы можете использовать их, чтобы получить данные в нужном вам формате.

Это должно работать

for(int i = 0; i < v.size(); i++) {
    DemoData demoData = new DemoData();
    demoData.fieldNames = new ArrayList<>(); // line# 1
    demoData.values = new ArrayList<>(); //line# 2
    demoData.autoId = k.get(i).toString();
    HashMap m = v.get(i);
    demoData.fieldNames.addAll(m.keySet());
    demoData.values.addAll(m.values());
}

В идеале вы должны удалить строки № 1 и 2 из моего кода и переместить их вконструктор класса DemoData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...