Как добавить значения в arraylist из arraylist?

Я получаю значения долготы и широты каждого пользователя из firebase, но проблема в том, что я хочу добавить эти значения каждого пользователя в один список, чтобы было много списков, поэтому я использую arraylist из arraylist.

Итак, для первого пользователя

долгота = 12345, широта = 23456

И для 2-го пользователя

долгота = 45678, широта = 67891.

Теперь мой вопрос: я хочу добавить долготу и широту первого пользователя в список [12345, 23456] и для второго пользователя [45678, 67891] При использовании arraylist из arraylist равно [[ 12345,23456],[45678, 67891]].

Мой код: -

Инициализация: -

    ArrayList<String> longitudes = new ArrayList<>();//for storing latitude and longitude values
    ArrayList<ArrayList<String> > aList =
            new ArrayList<ArrayList<String> >();
//for storing combine values of longitude and latitude

                databaseReference.child("hospital").addValueEventListener(new ValueEventListener() {
                    @SuppressLint("SetTextI18n")
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {

                        longitudes.clear();
                      
                         for (DataSnapshot snapshot1: snapshot.getChildren()) {
                             longitudes.add(snapshot1.child("longitude").getValue().toString());
                             longitudes.add(snapshot1.child("latitude").getValue().toString());
                             aList.add(count,longitudes);                           
                             count++;
                         }

                        
                        count=0;
                        }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {

                    }
                });

Но он выдает результат как

[[12345,23456,45678, 67891],[12345,23456,45678, 67891]] Он повторяет значения

Но я ожидаю для каждого пользователя, как

[[12345,23456],[45678, 67891]]

Ваш longitudes всегда один и тот же список. Создайте новый ArrayList и назначьте его longitudes на каждой итерации цикла вместо очистки и повторного использования существующего.

f1sh 22.02.2023 16:16

Именно там, где мне нужно создать и добавить значения

rushi 22.02.2023 16:21
Лучшая компания по разработке спортивных приложений
Лучшая компания по разработке спортивных приложений
Ищете лучшую компанию по разработке спортивных приложений? Этот список, несомненно, облегчит вашу работу!
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
Деревья поиска (Алгоритм4 Заметки к учебнику)
Деревья поиска (Алгоритм4 Заметки к учебнику)
(1) Двоичные деревья поиска: среднее lgN, наихудшее N для вставки и поиска.
0
2
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Реализация в основном неверна, так как я вижу, что вы пытаетесь добавить в массив долгот также и широту.

public void onDataChange(@NonNull DataSnapshot snapshot) {
    longitudes.clear();
    
    for (DataSnapshot snapshot1: snapshot.getChildren()) {
        Map<String, String> map = new HashMap();
            map.put('longitude',snapshot1.child("longitude").getValue().toString());
            map.put('latitude',snapshot1.child("latitude").getValue().toString());
            aList.add(count,map);                           
            count++;
        }
        count=0;
    }

OP пытается представить широту и долготу, используя список с двумя записями. Карта здесь не очень хорошая замена. Также ваш код не компилируется, потому что строковые литералы в java используют двойные кавычки.

f1sh 22.02.2023 16:18

Я пробовал с этим кодом. он работает, но он дает longi и lat как строку со значениями

rushi 22.02.2023 16:20

Вы можете сделать общие карты как Double или Integer в соответствии с вашими требованиями и можете хранить тип данных. Например, Map<String, Double> map = new HashMap();

OM KABB 22.02.2023 16:43
Ответ принят как подходящий

Ваш longitudes всегда один и тот же список. Создайте новый ArrayList и назначьте его longitudes на каждой итерации цикла вместо очистки и повторного использования существующего.

Удалите существующую переменную longitudes и сделайте так, чтобы ваш цикл выглядел так:

ArrayList<String> longitudes;
for (DataSnapshot snapshot1: snapshot.getChildren()) {
    longitudes = new ArrayList<>()
    longitudes.add(snapshot1.child("longitude").getValue().toString());
    longitudes.add(snapshot1.child("latitude").getValue().toString());
    aList.add(count,longitudes);                           
    count++;
}

Я также хотел бы предложить не представлять lat + long в виде списка с 2 элементами, просто создайте свой собственный класс с 2 полями или, если вы находитесь на java14+, используйте запись:

public record LatLong (String lat, String long) {}

А затем используйте это в своем списке:

ArrayList<LatLong > aList = new ArrayList<>();

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

rushi 22.02.2023 16:24

Вы очищаете его только один раз перед циклом. Затем вы дважды проходите цикл, добавляя значения в один и тот же общий список (и дважды добавляете этот список во внешний список).

Joachim Sauer 22.02.2023 16:43

Другие вопросы по теме