Объект не добавляется в список, список возвращается пустым - PullRequest
0 голосов
/ 17 апреля 2019

Я получаю данные с веб-сайта, и когда я получаю данные (String), я получаю отображение стран

for (Element row : document.select("table.sortable.wikitable tr")) {

                if (row.select("td:nth-of-type(1)").text().equals("")) {
                    continue;

                }
else {
String name = row.select("td:nth-of-type(1)").text();
System.out.println(name);

}

это дает мне список стран в моей консоли, теперь, когда я проверил, что я получаю страны, которые хочу вставить каждую страну в отдельный объект страны, используя список

final String url = "https://en.wikipedia.org/wiki/List_of_sovereign_states";
        List<Country> countries = new ArrayList<>();
        try {
            final Document document = Jsoup.connect(url).get();

            for (Element row : document.select("table.sortable.wikitable tr")) {

                if (row.select("td:nth-of-type(1)").text().equals("")) {
                    continue;

                } else {
                    for (Country country : countries) {

                        country.setCountry(row.select("td:nth-of-type(1)").text());


                        countries.add(country);

                    }

                }
            }
            System.out.println(countries);
        }

когда я распечатываю список, список становится пустым

[]

Ответы [ 3 ]

2 голосов
/ 17 апреля 2019

Проблема здесь:

else {
    for (Country country : countries) {
        country.setCountry(row.select("td:nth-of-type(1)").text());
        countries.add(country);
    }
}

Подумайте о том, что делает код. Когда вы нажимаете на блок else, вы просматриваете список стран, и , , создайте новую страну столько раз, сколько есть существующих стран в вашем списке. Но поскольку список начинается как пустой, этот цикл никогда не будет выполнен.

Решение простое. Полностью избавьтесь от цикла и просто сделайте это:

else {
    Country country = new Country();
    country.setCountry(row.select("td:nth-of-type(1)").text());
    countries.add(country);
}
2 голосов
/ 17 апреля 2019

Вы звоните Country country : countries туда, где хотите добавить новую страну в список, countries по умолчанию не содержит значений, поэтому он будет проходить по списку с 0 значениями и ничего не делать. Вы еще не добавляете новые страны в свой список countries.

Возможно, вы хотели сделать что-то подобное, создавая новый экземпляр Country:

if (row.select("td:nth-of-type(1)").text().equals("")) {
    continue;
} else {
    Country country = new Country();
    country.setName(row.select("td:nth-of-type(1)").text());
    countries.add(country);
}

(код выше предполагает, что td:nth-of-type(1) содержит название страны, но это всего лишь пример)

0 голосов
/ 17 апреля 2019

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

else {
    String countryName = row.select("td:nth-of-type(1)").text();
    Country country = new Country(countryName);
    countries.add(country);
}
...