Jak "zautomatyzować" funkcję ?

0

Witam. Mam pewien przykład. Mamy obiekt, który składa się z następujących pól:
String name;
double wiek;
double wzrost;
double waga;

Każdy obiekt jest wczytywany z pliku, a poszczególne pola obiektu w pliku oddzielone są znakiem ",". Oczywiście dane mam już podzielone za pomocą funkcji splitBy , nie to jest moim problemem. Przykładowe dane w pliku wyglądają następująco:

Ala,18,160,55
Adam,20,175,75
Michal,23,180,85
itd.

Chciałbym dokonać sumy poszczególnych property. Czyli np zsumować wagę , wzrost, wiek wszystkich osób. Samo sumowanie jest banalnie proste, natomiast mam pewien problem. Dla każdego property musiałbym pisać funkcję "suma". Przy trzech-czterech property nie mam problemu, ale gdyby taki obiekt składał się ze stu? Jakie rozwiązanie w takiej sytuacji jest najlepsze? Jak "zdynamizować" tą funkcję by rozwiązać tego typu problem?

 public static double suma(List<? extends SampleClass> list)
	{
		double suma =0 ;
		
		for(SampleClass p: list)
		{
			suma+=p.getWiek(); // suma+=p.getWaga();// suma+=p.getWzrost();
		}
  
		return suma;
	
	}

Z góry dzięki za pomoc :]

0

Zamiast ręcznie wypisywać zmienne w obiekcie, daj np. tablice i sumujesz p.getTab[1] element każdej osoby z listy.

0

Luźna myśl: może dałoby się jakoś wykorzystać stream api?

0

Przy trzech-czterech property nie mam problemu, ale gdyby taki obiekt składał się ze stu?
To znaczyłoby, że coś spieprzyłeś.

Mógłbyś to ogarnąć refleksją, ale jak musiałbyś w jakiś chory sposób oznaczać to, co Cie interesuje.

1

Mamy naszą listę List<? extends SampleClass> lista zatem możemy napisać:

lista.stream().mapToDouble(SampleClass::getWiek()).sum(); // suma
/// albo średnia:
lista.stream().mapToDouble(SampleClass::getWiek()).average();

I działa :)

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