1. Lambda expressions
    Map<Person.Gender, List<Person>> byGender =
    roster.stream().collect(Collectors.groupingBy(Person::getGender));

    Parallel operations
    The actual iteration over a collection on which a Lambda function is applied now carried out by the core library itself (i.e. internal iteration).

    New JVM
    With this new release, Java 8 is introducing a completely new JVM JavaScript engine – Nashorn. This engine makes unique use of some of the new features introduced in Java 7 such as invokeDynamic to provide JVM-level speed to JavaScript execution right there with the likes of V8 and SpiderMonkey.

    New date / time APIs
    Java 8 implemented its own new date / time API from scratch.

    Concurrent accumulators
    Concurrent accumulator classes that enable you to very efficiently increase / decrease the value of a counter in a thread safe manner.

    Now 6 Best Java 9 Feature updates:

    New module system

    Large applications maintaining a library come with a myriad of challenges: Increasing the code base leads to the complicated code and use of snarled dependencies.

    Trying to find clear dependencies between different parts of the system is difficult when you are trying to compress code with every public class.

    The Jigsaw project that is included in the new Java version is meant to solve all these issues.

     

    HTTP/2.0 support

    How the data is framed and transported between client and server is the primary difference between HTTP1.1 and HTTP/2. HTTP/1.1 is reliant upon a request and response cycle.  HTTP/2 can allow a push data type of process, this process can send back more data then requested by the client.  With this method of prioritizing and sendng data web pages will load first.  HTTP 2.0 will have the full support of Java 9 with new HTTP client features.

    Improved Javadoc

    There are some very helpful enhancements to the javadoc in Java 9, one of them is the addition of a search box.  I know, it sounds simple, but sometimes the simple improvements are the best.

    Stream improvements

    Being able to create Stream from Optimal continues to be a game changing feature in Java.  The Stream API was very important in Java 8 and with Java 9 it has gotten even better. There are also four new methods added to the Stream interface: iterate, dropWhile, takeWhile, ofNullable.

    DropWhile discards the first items of the stream until a condition is met.

    TakeWhile processes items until a condition is met.

    Iterate allows you to write proper replacements for the for loops using streams. It takes the initial value of the stream, the condition that defines when to stop iterating and the step function to produce the next element.

    OfNullable as the name suggest let you create streams from objects without the need to check for nulls. It returns a sequential Stream containing a single element, if non-null, otherwise returns an empty Stream.

    Initialization of collections is updated with new factory methods

    If you want to create a List of predefined values you have to do a lot of typing.

    Newly added factory methods will be dramatically easier with the initialization of common collections. Enhancements in the static methods in the interfaces to allow for  the List, Set, and Map interfaces to be made with up to 10 elements. Performance is optimized.

    Enhanced process API

    Control and the ability to manage the operating system was severely limited.  In addition, the code that you wrote to do such interactions was dependent on the OS.

    With this new release  you will have the ability to interact with the operating system. Handling the PID management , process names, states and child process have been added.

Why should I already look to Java 10? 

Unfortunately, some features were not integrated into the new Java 9:

  • A standardized and light-weighted JSON API is hyped by many java developers.
  •        The money and currency API

 All in Good time, says the developers at Oracle!