#!Saab said that a major focus of OpenJDK 8 and Java SE 8 was “making sure the performance is still excellent. This is the largest change ever been made to Java. This is a change we made both to the languages and in the Java virtual machine.”

Other changes to the language include the new Date and Time API, and the removal of restrictions that kept annotations from being used outside of class/method/field/variable declarations. The new String API finally includes a string joiner, which has been long absent from the language, and was frequently added by hand by developers.

What’s not in OpenJDK 8 and Java SE 8 is Project Jigsaw, an attempt to split the Java platform up into a more modularized set of components. This effort turned out to be too complex for the Java 8 release, and has thus been pushed back to Java 9.

What’s a lambda expression?
From the Java Community Process board’s initial proposal for lambda expressions:

We propose extending the Java Language to support compact lambda expressions (otherwise known as closures or anonymous methods.) Additionally, we will extend the language to support a conversion known as “SAM conversion” to allow lambda expressions to be used where a single-abstract-method interface or class is expected, enabling forward compatibility of existing libraries.

We propose extending the semantics of interfaces in the Java Language to support virtual extension methods, whereby an interface can nominate a static default method to stand in for the implementation of an interface method in the event that an implementation class does not provide an implementation of the extension method. This enables interfaces to be augmented with new methods “after the fact” without breaking existing implementation classes.

Time permitting, we will use these features to augment the core Java SE libraries to support a more lambda-friendly style of programming, such as:
      Collection collection = … ;
      collection.sortBy(#{ Foo f -> f.getLastName() });
or
      collection.remove(#{ Foo f -> f.isBlue() });

This will likely be accompanied by a set of standardized “SAM” types such as Predicate, Filter, Mapper, Reducer, etc.