Jak z predykatu wyciągnąć średnią?

0

Jak mając predykat:

public static Predicate<Employee> isAdultMale() {
        return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("M");
    }

dla obiektów:

Employee e1 = new Employee(1,23,"M");   //id, wiek, gender
Employee e2 = new Employee(2,13,"F");
Employee e3 = new Employee(3,43,"M");

obliczyć średnią wieku?
Potrafię tylko wyświetlić np. [1 - 23M, 3 - 43M] // [id - wiek gender]

0

Najlepiej jak e1, e2, e3 będą w jednej liście (ArrayList) e.

W pętli będziesz mógł sobie dodać wiek wszystkich elementów listy:
int suma = 0; for [...] suma = suma + e.get(i).getAge();
i obliczyć z niego średnią:
float srednia = (float)suma/(float)e.size();.

A jak chcesz bez pętli i listy, no to zrób po prostu sumę e1.getAge() + e2.getAge() + e3.getAge() i podziel przez 3.0, rzutując na float/double.

2
Spine napisał(a):

Najlepiej jak e1, e2, e3 będą w jednej liście (ArrayList) e.

W pętli będziesz mógł sobie dodać wiek wszystkich elementów listy:
int suma = 0; for [...] suma = suma + e.get(i).getAge();
i obliczyć z niego średnią:
float srednia = (float)suma/(float)e.size();.

A jak chcesz bez pętli i listy, no to zrób po prostu sumę e1.getAge() + e2.getAge() + e3.getAge() i podziel przez 3.0, rzutując na float/double.

Bardzo dziękuję, na prostych rzeczach czasem człowiek się zatrzymuje.
Zrobiłem sobie to tak, ale już rano z odświeżonym umysłem :)

System.out.println(employees.stream().mapToDouble(e->e.getAge()).average().getAsDouble());

0

Kolezko, poucz się może więcej o functional interfejsach, bo predicate to jedyny :P

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