Android,使用给定的类从Map到Object获取值

时间:2019-04-09 11:11:17

标签: java android google-cloud-firestore

我从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 个答案:

答案 0 :(得分:2)

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的构造函数中。