Есть ли способ сделать список в списке из таблицы? - PullRequest
1 голос
/ 14 апреля 2020

Это код, который я пробовал:

ArrayList<ArrayList<String>> select = new ArrayList<ArrayList<String>>();
ArrayList<String> selectin = new ArrayList<String>();
ResultSet lihat = st.executeQuery("select * from usersss");
        while (lihat.next()){
            selectin.set(0, lihat.getString("user"));
            selectin.set(1, lihat.getString("password"));
            selectin.set(2, lihat.getString("email"));
            select.add(selectin);       
        }

for (int i = 0; i<select.size();i++) {
            System.out.println(select.get(i));
        }

Это результат:

[kursi, meja, kursi@gmail.com]
[kursi, meja, kursi@gmail.com]
[kursi, meja, kursi@gmail.com]
[kursi, meja, kursi@gmail.com]

Это желаемый результат (фактическая таблица):

[paosp,skajs,paosp@gmail.com]
[fisd,mole,fisd@gmail.com]
[trem,olo,trem@gmail.com]
[kursi,meja,kursi@gmail.com]

Похоже, список selectin обновляется внутри списка select. Есть ли способ заставить его не делать этого?

Ответы [ 3 ]

2 голосов
/ 14 апреля 2020

Я думаю, что ваше время l oop должно быть

    while (lihat.next() ) {
        selectin = new ArrayList<>();
        selectin.add( lihat.getString("user") );
        selectin.add( lihat.getString("password") );
        selectin.add( lihat.getString("email") );
        select.add( selectin );       
    }

Поскольку оно передается по ссылке, вторая итерация обновляет первый добавленный массив. Вот почему результат одинаков после всех итераций.

1 голос
/ 14 апреля 2020

Метод set() класса java.util.ArrayList используется для замены элемента в указанной позиции в этом списке указанным элементом.

логический add(Object o): этот метод используется для добавления определенного элемент в конец списка.

вы должны заменить set() на add() в l oop.

while (lihat.next() ) {
        selectin = new ArrayList<>();
        selectin.add( lihat.getString("user") );
        selectin.add( lihat.getString("password") );
        selectin.add( lihat.getString("email") );
        select.add( selectin );       
    }
1 голос
/ 14 апреля 2020

Вы фактически заменяете значения в той же ссылке переменной selectin. И переменная select содержит только одну ссылку selectin несколько раз.

Создайте новый ArrayList для каждого нового элемента в select, например:

ArrayList<ArrayList<String>> select = new ArrayList<ArrayList<String>>();
ResultSet lihat = st.executeQuery("select * from usersss");

while (lihat.next()){
    ArrayList<String> selectin = new ArrayList<String>();
    selectin.add(lihat.getString("user"));
    selectin.add(lihat.getString("password"));
    selectin.add(lihat.getString("email"));
    select.add(selectin);       
}

for (int i = 0; i<select.size();i++) {
    System.out.println(select.get(i));
}

Это создаст новый объект ArrayList и каждый раз, когда запускается l oop.

И вы получите ожидаемый результат.

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