Iteracja listy z wywołaniem metody

0

Witam,
musze przeiterować listę za pomocą pętli forEach i na każdym obiekcie wywołać przeładowaną metodę toString()

List<Student> studentList = new ArrayList<>();

        Osoba osoba = new Osoba();
        osoba.setImie("Jan");
        osoba.setNazwisko("Kowalski");
        osoba.setIndeks(1231);
        Student student = new Student(osoba, WydzialEnum.SOPOT);
        student.setWydział(WydzialEnum.GDYNIA);

        Osoba osoba4 = new Osoba();
        osoba.setImie("Tomcio");
        osoba.setNazwisko("Paluch");
        osoba.setIndeks(21112);
        Student student4 = new Student(osoba4, WydzialEnum.SOPOT);
        student4.setWydział(WydzialEnum.GDYNIA);

        Osoba osoba1 = new Osoba();
        osoba.setImie("Marek");
        osoba.setNazwisko("Mostowiak");
        osoba.setIndeks(997);
        Student student1 = new Student(osoba1, WydzialEnum.SOPOT);
        student1.setWydział(WydzialEnum.GDANSK);

        Osoba osoba2 = new Osoba();
        osoba.setImie("Adam");
        osoba.setNazwisko("Małysz");
        osoba.setIndeks(2137);
        Student student2 = new Student(osoba2, WydzialEnum.SOPOT);
        student2.setWydział(WydzialEnum.SOPOT);

        Osoba osoba3 = new Osoba();
        osoba.setImie("Adam");
        osoba.setNazwisko("Nowak");
        osoba.setIndeks(120938);
        Student student3 = new Student(osoba3, WydzialEnum.SOPOT);
        student3.setWydział(WydzialEnum.GDANSK);



        studentList.add(student);
        studentList.add(student1);
        studentList.add(student2);
        studentList.add(student3);
        studentList.add(student4);

//        for (Student p : studentList) {
//            System.out.printf(student.toString());
//        }

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

Mam wszystko przygotowane ale już chyba mózg wysiada i w terminalu wyskakuję to w ten sposób

Student) Imię: Adam | Naziwsko: Nowak | Indeks: 120938 Wydział) GDYNIA
Student) Imię: Jan | Naziwsko: Kowalski | Indeks: 525234 Wydział) GDANSK
Student) Imię: Jan | Naziwsko: Kowalski | Indeks: 525234 Wydział) SOPOT
Student) Imię: Jan | Naziwsko: Kowalski | Indeks: 525234 Wydział) GDANSK
Student) Imię: Jan | Naziwsko: Kowalski | Indeks: 525234 Wydział) GDYNIA

Będę wdzięczny za radę + czy da sie jakoś tych wszystkich studentów stworzyć w ramach jednego obiektu?

0

Spójrz na swoje settery :)

0

za pomocą pętli forEach

for(Osoba student : studentLists) {
System.out.printl(student.toString());
}

Pisane ze smartfona.

1

kolekcja.forEach(System.out::println);

4

Można też zrobić sobie buildera na studenta i osobę:

class Osoba {

	private String imie;
	private String nazwisko;
	private int indeks;

	private Osoba(Builder builder) {
		this.imie = builder.imie;
		this.nazwisko = builder.nazwisko;
		this.indeks = builder.indeks;
	}

	public static Builder newOsoba() {
		return new Builder();
	}


	public static final class Builder {
		private String imie;
		private String nazwisko;
		private int indeks;

		private Builder() {
		}

		public Osoba build() {
			return new Osoba(this);
		}

		public Builder imie(String imie) {
			this.imie = imie;
			return this;
		}

		public Builder nazwisko(String nazwisko) {
			this.nazwisko = nazwisko;
			return this;
		}

		public Builder indeks(int indeks) {
			this.indeks = indeks;
			return this;
		}
	}
}

class Student {
	private Osoba osoba;
	private Wydzial wydzial;

	private Student(Builder builder) {
		this.osoba = builder.osoba;
		this.wydzial = builder.wydzial;
	}

	public static Builder newStudent() {
		return new Builder();
	}


	public static final class Builder {
		private Osoba osoba;
		private Wydzial wydzial;

		private Builder() {
		}

		public Student build() {
			return new Student(this);
		}

		public Builder osoba(Osoba osoba) {
			this.osoba = osoba;
			return this;
		}

		public Builder wydzial(Wydzial wydzial) {
			this.wydzial = wydzial;
			return this;
		}
	}
}

enum Wydzial{
	SKUTERY, MALE_ROWERY, PLOTKOLOGIA;
}`

wtedy tworzenie tych obiektów będzie znacznie prostsze:

Student.newStudent()
        .osoba(
                Osoba.newOsoba()
                        .imie("Jan")
                        .nazwisko("Jakiś")
                        .indeks(666)
                        .build()
        )
        .wydzial(Wydzial.SKUTERY)
        .build();

Samo wypisywanie przez to co podał @Charles_Ray będzie ok.

0

@Koziołek: pewnie mnie zaraz ktoś zbiczuje za używanie adnotacji, ale nie trzeba klepać buildera ręcznie, no chyba że robimy jakiegoś bezpiecznego ;)

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class Student {

    private Osoba osoba;
    private Wydzial wydzial;
}
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class Osoba {

    private String imie;
    private String nazwisko;
    private int indeks;
}

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