programowanie funkcjonalne Java 1.8

0
	int Max = 0;
		int MaxPeremia=0;
		for(Employee n: FirmaPopka()){
			Max+= n.getSalry();
			if(n instanceof Worker){
				Worker w= (Worker)n;
				MaxPeremia+= w.getBonus();
				 Optional<Integer> sum = FirmaPopka().stream().map(w::getBonus).reduce( 0.0,(part, next) -> part + next);// TO POWINNO DZIAŁAĆ TAK ALE GDZIEŚ JEST JAKIŚ MAŁY BŁĄD!

Niby program działa bo w.getBonus zwraca to co chce ale zadanie mam aby to zrealizować przy pomocy wyrażeń funkcjonalnych czyli jakoś tak . Nie mam dostepu do obiektu wiec daje to w if chyba że da się to inaczej zrobić . Chodzi o sumę wszystkich bonusów suma premi.

 Optional<Integer> sum = FirmaPopka().stream().map(w::getBonus).reduce( 0.0,(part, next) -> part + next);
0

Nie wiem jak inni ale ja nie rozumiem co ty chcesz dostać na wyjściu bo w kodzie widze 3 różne wartości które są liczone.
Chyba ze chodzi ci tylko o wrzucenie tego if(n instanceof Worker) do tego wyrażenia ze strumieniem? Dodaj .filter(n -> n intanceof Worker) za .stream() i tyle. Poza tym zamiast tego reduce użyłbym jednak .collect(Collectors.summingInt()) po prostu.

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