Skip to main content

Command Palette

Search for a command to run...

Java 8 New features

Updated
•2 min read•View as Markdown
Java 8 New features

Java 8 introduced several new features and enhancements to the language, focusing on improving code readability, conciseness, and support for functional programming. Here are some key features with examples:

1. Lambda Expressions

Lambda expressions introduce a concise way to express instances of single-method interfaces (functional interfaces). They improve the readability of code, especially when working with functional interfaces.

For more explanation Lambda Expression

Example:

// Before Java 8
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("Running the old way!");
    }
};

// Java 8 with Lambda
Runnable lambdaRunnable = () -> System.out.println("Running with Lambda!");

2. Functional Interfaces

Functional interfaces are interfaces with a single abstract method. They enable the use of lambda expressions for concise and expressive code.

Example:

// Predefined Functional Interface: Runnable
Runnable myRunnable = () -> System.out.println("Executing...");

// Custom Functional Interface
@FunctionalInterface
interface MyFunctionalInterface {
    void myMethod();
}

MyFunctionalInterface myFunction = () -> System.out.println("My custom method.");

3. Streams API

The Streams API provides a powerful and expressive way to manipulate collections of data, supporting operations like filter, map, reduce, and more.

Details on Stream API

Example:

List<String> myList = Arrays.asList("Apple", "Banana", "Orange", "Grapes");

// Using Stream API to filter and print
myList.stream()
       .filter(fruit -> fruit.startsWith("A"))
       .forEach(System.out::println);

4. Default Methods

Default methods allow interface authors to add new methods to interfaces without breaking backward compatibility.

Static and Default method

Example:

interface MyInterface {
    void existingMethod();

    default void newMethod() {
        System.out.println("Default implementation of newMethod");
    }
}

class MyClass implements MyInterface {
    @Override
    public void existingMethod() {
        System.out.println("Implementing existingMethod");
    }
}

// Using default method
MyClass myObject = new MyClass();
myObject.existingMethod();
myObject.newMethod();

5. Method References

Method references provide a shorthand syntax for lambda expressions to call methods.

Example:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

// Using lambda expression
names.forEach(name -> System.out.println(name));

// Using method reference
names.forEach(System.out::println);

6. Optional

The Optional class provides a more robust way to handle potentially null values without explicitly using null references.

Optional Class in Java 8

Example:

String name = null;

// Before Java 8
if (name != null) {
    System.out.println(name.length());
} else {
    System.out.println("Name is null");
}

// Java 8 with Optional
Optional<String> optionalName = Optional.ofNullable(name);
optionalName.ifPresent(n -> System.out.println(n.length()));

These Java 8 features contribute to more expressive, concise, and maintainable code, enabling developers to write cleaner and more functional-style programs. Each feature addresses specific aspects of programming, promoting best practices and enhancing the overall development experience in Java.

More from this blog

Navnit Raj

20 posts

Seasoned software developer specializing in Java Angular and various other cutting-edge technologies.My goal is to bring expertise,creativity, and a collaborative spirit to every development endeavor