Как суммировать вложенные значения внутри hashMap Firestore - PullRequest
2 голосов
/ 19 января 2020

В настоящее время я использую Firestore и у меня есть следующие данные в документе:

Вот структура документа.

Во-первых, я хотел бы получить эти 3 значения ie., Phonenumb, chapter1 и его значения. Во-вторых, я sh суммирую значения главы 1 и сохраняю их для каждого номера телефона. Позже это будет использоваться для целей графика

Document Structure Мне удалось получить их во внешний и внутренний HashMaps со следующим кодом:

CollectionReference chemistry = db.collection("RESULTS").document("Summary").collection("ChemistryVII");
chemistry
        .whereEqualTo("school", "Test School")
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                for (DocumentSnapshot document : task.getResult()) {
                    Map<String, Object> map = document.getData();
                    for (Map.Entry<String, Object> entry : map.entrySet()) {
                        if (entry.getKey().contains("chapter")) {
                            if (outer.isEmpty() || !outer.containsKey(map.get("phonenumb"))) {
                                Map<String, Object> inner = new HashMap<>();
                                inner.put(entry.getKey(), entry.getValue());
                                String phonenumb = map.get("phonenumb").toString();
                                outer.put(phonenumb, inner);
                            } else {
                                Map<String, Object> inner = new HashMap<>();
                                inner.put(entry.getKey(), entry.getValue());
                                String phonenumb = map.get("phonenumb").toString();
                                outer.put(phonenumb, inner);
                            }
                            doSumm();
                            Toast("Document " + outer.values());
                        }
                    }
                }
            }
        });

I Теперь wi sh для суммирования значений внутреннего HashMap с помощью doSumm (), но я сталкиваюсь с проблемами.

Моя попытка doSumm заключается в следующем.

private void doSumm() {
    int counter = outer.size();
    List<Long> chaptersum = new ArrayList<>();
    Toast("Outer Size "+ outer);

    // Map<String, Map<String, Object>> chapterwise = new HashMap<>();
    //Toast("Map Values " + ((Map) outer.get("5100351003")));
    for (Map.Entry<String, Map<String, Object>> entry : outer.entrySet()) {
        Map<String, Object> inner = entry.getValue();
        int count = inner.size();
        long summ = inner.values().stream().mapToLong(Long::longValue).sum();
    }
}

Я получаю следующая ошибка в Long :: longValue: «На метод non-stati c нельзя ссылаться из stati c content»

Кроме того, я не уверен, является ли это оптимальным способом суммирования значений внутри вложенный hashmap.

Мне нужны независимые значения в следующем упражнении, которые будут отображать их отдельно на другом графике.

Заранее спасибо за помощь.

...