Lambda expressions don't get translated into anonymous inner classes
, they use invoke dynamic that was introduced in Java 7 to execute functional methods. Check this out.
Do they violate OOP
? I don't think that you should care. Lambdas make your code less verbose, easier to understand, and "easier" to parallelise. And thats what you should care about.
From Brain Goetz comment:
We don't get paid to write object-oriented programs or functional programs, we get paid to write working programs.