Is it possible to run a method, in a consumer, like a method reference, but on the object passed to the consumer:
Arrays.stream(log.getHandlers()).forEach(h -> h.close());
would be a thing like:
Arrays.stream(log.getHandlers()).forEach(this::close);
but that's not working...
Is there a possibility with method references, or is x -> x.method()
the only way working here?
Java Stream forEach() method is used to iterate over all the elements of the given Stream and to perform an Consumer action on each element of the Stream.
Some of the most prominent methods used in these examples are the filter() - which allows elements that match the predicate, count() - which counts the number of items in a stream, map() - which applies a function in each element of Stream for transformation, and collect() - which collects the final result of Stream ...
Original pre-Java 8 answer: List<Car> cars = //... Function<Car, String> carsToNames = new Function<Car, String>() { @Override public String apply(Car car) { return car. getName(); } } List<String> names = Lists. transform(cars, carsToNames);
The filter() method allows us to pick a stream of elements that satisfy a predicate.
You don't need this
. YourClassName::close
will call the close
method on the object passed to the consumer :
Arrays.stream(log.getHandlers()).forEach(YourClassName::close);
There are four kinds of method references (Source):
Kind Example
---- -------
Reference to a static method ContainingClass::staticMethodName
Reference to an instance method of a particular object containingObject::instanceMethodName
Reference to an instance method of an arbitrary object of a particular type ContainingType::methodName
Reference to a constructor ClassName::new
In your case, you need the third kind.
I suppose it should be:
Arrays.stream(log.getHandlers()).forEach(Handler::close);
Provided the log.getHandlers()
returns an array of objects of type Handler
.
Sure, but you must use the correct syntax of method reference, i.e. pass the class to which the close()
method belong:
Arrays.stream(log.getHandlers()).forEach(Handler::close);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With