Iteracja listy z wywołaniem metody

Iteracja listy z wywołaniem metody
OW
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • Postów:3
0

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

Kopiuj
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

Kopiuj
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?

edytowany 1x, ostatnio: owolcz
SP
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 12 godzin
  • Postów:30
0

Spójrz na swoje settery :)

OW
xd godzina życia stracona, dzięki, a jak z tą pętlą? bo teraz faktycznie wyświetlają sie wszyscy ale po 5 razy
SP
bo printujesz listę a nie dany obiekt , wystarczy chyba bez pętli w takim razie zrobić printa
OW
hmm okej, ale kiedy własicwie wykonuje się ta metoda toString() w takim razie?
SP
Nie znasz własnego kodu ? System.out.println(studentList.toString());
.andy
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 3 lata
  • Postów:1524
0

za pomocą pętli forEach

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

Pisane ze smartfona.


Software is like sex: it's better when it's free.
- Linus Torvalds
edytowany 1x, ostatnio: .andy
Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 6 godzin
  • Postów:1875
1

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


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
.andy
o albo tak. Prościej i bardziej elegancko ;)
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:17 dni
  • Lokalizacja:Stacktrace
  • Postów:6821
4

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

Kopiuj
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:

Kopiuj
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.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
edytowany 1x, ostatnio: Koziołek
.andy
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 3 lata
  • Postów:1524
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 ;)

Kopiuj
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class Student {

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

@Data
@Builder
public class Osoba {

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

Software is like sex: it's better when it's free.
- Linus Torvalds
Zobacz pozostałe 7 komentarzy
jarekr000000
@.andy: zamiast Lomboka - używawać nowszej javy albo języka, która ma to wszystko wbudowane i nie wygląda jak wymiociny - zgadnij którego... Lombok bywa tragicznie upierdliwy nawet w swojej własnej kategorii (przez absurdalny sposób działania - podmienianie kodu in place).
.andy
@jarekr000000: ale jak mi nowa Java zastąpi lomboka, bo nie rozumiem? Przykład buildera. Taki klasyczny. Jak to zrobic?
jarekr000000
@.andy: w javie nie da się w ogóle sensownego buildera zrobić. Bo recordy obsysają :/ wbrew video powyżej. W kotlinie masz .copy() i nazwane parametry co działa dużo fajniej od klasycznych builderów (bo klasyczny builder (z lombokiem czy bez) jest mutowalny).
Charles_Ray
Lombok obsysa na kilku frontach, na kilku pomaga. IMO każdy może sobie to rozpisać i zobaczyć, czy zady przewyższają walety w jego kontekście. Jak jest opcja, Kotlin lepszy.
.andy
@jarekr000000: w javie nie da się w ogóle sensownego buildera zrobić. Bo recordy obsysają eee Można fajnie bezpieczne buildery zrobić, które pokierują jakie pola trzeba stworzyć ale to dalej zabawa w ręczne pisanie kodu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.