Write a method davidist that returns an Optional<Float> result and has 3 parameters:
A Stream<Float> named s
A Predicate<Float> for Float elements named p
A binary operator for Float elements named b
The method chooses from the stream the elements for which p is true and returns the result of the binary operator applied between the elements for which p is true if there are more than one elements, otherwise it returns Optional.empty().