我从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());
}
(看起来像):
我如何在列表“ v”中遍历每个项目的每个字段名/值对,并将它们保存到两个单独的列表中。 (然后从它们中形成DemoData对象)。
因此,DemoData对象将如下所示:
autoId: "YbWQh..."
fieldNames: ["default", "entity_name", "Datum", "fav"...]
values: [false,"Fontos datumok", Timestamp..., false...]
最佳答案
List
具有一个接受任何实现Collection
接口的数据结构的构造函数。 Map
具有在实现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
的构造函数中。