I may assume that the question is about Imperative
vs. Declarative
programming in Java.
Because lambda/method reference can be compared only to anonymous class performance.
They take different steps before execution:
Lambda vs Anonymous Class
linkage class loading
capture instantiation
invocation invocation
Overall benchmarks show that lambda is a bit faster with "hot" benchmarks and significant faster with "cold" benchmarks.
Regarding complex methods and collections processing there is no overall performance benchmarks like X
is faster than Y
.
You should specify a case to compare performance benchmarks, in some cases classic approach can work faster, in some case - functional. I may assume that in most cases classic approach will work faster, especially when working with mutable objects.
But it's much easier to process a collection in a parallel way with functional style. Streams are lazily-executed, what its an advantage.
It's very good feature that Java supports functional programming, streams and lambdas, but they are not silver bullet. Use them wisely.