Wyciąganie kilku danych naraz ze span i dodanie wszystkiego do Listy używając Jsoup

0

cześć,

Chciałbym wyodrębnić dane z elementów takich jak span i zapisać jako obiekt klasy do listy, ale kiedy chcę dodać przygotowany obiekt klasy Fighter, mam 10 x takich samych danych na liście.

(Powinno być: 1. Stipe Miocic 2. Daniel Cormier 3. Francis Ngannou itp., Ale ma 10 x 10. Cheick Kongo)

Mam wrażenie, że ta lista.add (f1); jest w niewłaściwym miejscu lub powinienem użyć wątków na metodzie heavyweight (), ale nie jestem pewien nawet za co się zaczepić/gdzie jest błąd..

	private List<Fighter> list = new ArrayList<>();

	public void heavyweight() throws IOException {

		Fighter f1 = new Fighter();
		String url = "https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999";
		Document document = Jsoup.connect(url).get();
		Elements fighters = document.select("h2 > a[href]");
		for (Element fighter : fighters) {
			System.out.println(fighter.text());
			String fighterUrl = "https://www.sherdog.com" + fighter.attr("href");
			Document doc = Jsoup.connect(fighterUrl).get();

			Element fighterData = doc.select("span[class=item height]").first();
			f1.setWeight(fighterData.text().toString());
			fighterData = doc.select("span[class=fn]").first();
			f1.setName(fighterData.text().toString());
			fighterData = doc.select("span[class=item birthday]").first();
			f1.setAge(fighterData.text().toString());

			list.add(f1);

			// fighterData = doc.select("div.data").first();
			// System.out.println(fighterData.text());
			System.out.println("---------------");

		}

	}

	public void print() {
		System.out.println("LIST: ");
		System.out.println();
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
	}

Ekran wynikowy:

Stipe Miocic
---------------
Daniel Cormier
---------------
Francis Ngannou
---------------
Junior dos Santos
---------------
Curtis Blaydes
---------------
Derrick Lewis
---------------
Alexander Volkov
---------------
Alistair Overeem
---------------
Ryan Bader
---------------
Cheick Kongo
---------------
LIST: 

Fighter [name=Cheick Kongo, age=Born: 1975-05-17 AGE: 44, weight=Height 6'4" 193.04 cm]
Fighter [name=Cheick Kongo, age=Born: 1975-05-17 AGE: 44, weight=Height 6'4" 193.04 cm]
Fighter [name=Cheick Kongo, age=Born: 1975-05-17 AGE: 44, weight=Height 6'4" 193.04 cm]
...
itp...
1

Przenieś Fighter f1 = new Fighter(); do pętli for:

for (Element fighter : fighters) {
Fighter f1 = new Fighter();
...
1

Po prostu mutowałeś ciągle obiekt. Stworzyłeś go raz na początku, a potem w każdym obrocie pętli nadawałeś mu nowe wartości setterem. Gdybyś sobie przedebugował zobaczyłbyś, że na koniec w list masz 3 te same obiekty. Ostatnim działaniem było ustawienie wartości ostatniego zawodnika z Element, więc końcowe wartości Twojego f1 to były właśnie dane Cheicka Kongo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1