[Go to site: main page, start]

0% found this document useful (0 votes)
8 views15 pages

Java 8 Features With Examples

Java 8, released on March 18, 2014, introduced significant updates to the Java programming language, including features like functional interfaces, lambda expressions, the Stream API, and the Optional class to enhance productivity and performance. Key improvements also include a new Date Time API, enhancements to the Collection and IO APIs, and the ability to encode and decode Base64. Java 8 remains popular due to its Long-Term Support status and the introduction of features that have been inspired by other programming languages.

Uploaded by

aka34702
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views15 pages

Java 8 Features With Examples

Java 8, released on March 18, 2014, introduced significant updates to the Java programming language, including features like functional interfaces, lambda expressions, the Stream API, and the Optional class to enhance productivity and performance. Key improvements also include a new Date Time API, enhancements to the Collection and IO APIs, and the ability to encode and decode Base64. Java 8 remains popular due to its Long-Term Support status and the introduction of features that have been inspired by other programming languages.

Uploaded by

aka34702
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Table Of Contents

show
 What is Java 8?
 Top Java 8 Features with Examples
o Functional Interfaces And Lambda Expressions
o forEach() Method In Iterable Interface
o Optional Class
o Default And Static Methods In Interfaces
o Java Stream API For Bulk Data Operations On Collections
o Java Date Time API
o Collection API Improvements
o Java IO Improvements
o Miscellaneous Core API Improvements
o Base64 Encode Decode
 Conclusion
 FAQs
 Additional Resources

On March 18, 2014, Java 8 was released. Even though it was a long time ago,
Java 8 is still used in many applications because Java 8 got a significant update
with several new features. Let’s take a look at all of Java 8 features using sample
code.

What is Java 8?

Oracle’s Java 8 release was a watershed moment in the history of the world’s
most popular development platform. In addition to a significant improvement to
the Java programming paradigm as a whole, the JVM, Java language, and
libraries were all updated in a coordinated manner. Many new features were
included in this update, including enhanced simplicity of use, increased
productivity and security, and overall better system performance.

Top Java 8 Features with Examples

The following Java 8 features will be discussed briefly, with each being explained
via the use of basic and simple examples.
Functional Interfaces And Lambda Expressions

In Java 8, a new notion called functional interfaces was introduced. A Functional


Interface is an interface that has exactly one abstract method. To designate an
interface as a Functional Interface, we don’t need to use the
@FunctionalInterface annotation.

The @FunctionalInterface annotation prevents abstract methods from being


accidentally added to functional interfaces. It’s similar to a @Override annotation,
and it’s recommended that you use it. [Link]. Runnable is a fantastic example
of a functional interface since it has one abstract method, run ().
One of the most appealing features of the functional interface is creating objects
using lambda expressions. We can create an interface using an anonymous
class, but the code is cumbersome. For example:

@FunctionalInterface

public interface FunctionalInterface_one

public void firstInt_method();

@Override

public String toString(); //Overridden from Object


class

@Override

public boolean equals(Object obj); //Overridden from


Object class

An anonymous function may be defined as a Lambda Expression (or function) (a


function with no name and an identifier). Lambda Expressions are defined
precisely where they are required, often as a parameter to another function.

Lambda Expressions, on the other hand, express instances of Functional


Interfaces from a different viewpoint. Lambda Expressions implement functional
interfaces by implementing the single abstract function provided in the functional
interface.

A basic example of the Lambda Expression is:


(x,y) -> x+y

The formula above accepts two parameters, x, and y, and returns their total, x+y.
The procedure may be used numerous times in different locations depending on
the data type of x and y. As a result, the arguments x and y will match int or
Integer and string, and depending on the context; it will either add two numbers
(if the parameters are int) or concatenate the two strings (when parameters are a
string).

Let’s implement a program that demonstrates Lambda Expressions.

interface MyInterface

void abstract_func(int x,int y);

default void default_Fun()

[Link]("This is default method");

}
class Main

public static void main(String args[])

//lambda expression

MyInterface fobj = (int x, int y)-


>[Link](x+y);

[Link]("The result = ");

fobj.abstract_func(5,5);

fobj.default_Fun();

forEach() Method In Iterable Interface

In Java 8, the [Link] interface now supports a “forEach” function. Iterable that
can iterate over the collection’s items. The Iterable interface has a default
method called “forEach.” Collection classes use it to iterate items, which extends
the Iterable [Link] may send Lambda Expression as an argument to the
“forEach” method, which accepts the Functional Interface as a single parameter.
[Link];

[Link];

public class Main {

public static void main(String[] args) {

List<String> subList = new ArrayList<String>();

[Link]("Carrot");

[Link]("Potato");

[Link]("Cauliflower");

[Link]("LadyFinger");

[Link]("Tomato");

[Link]("------------Vegetable
List--------------");

[Link](sub -> [Link](sub));

Output:
————Vegetable List————–
Carrot
Potato
Cauliflower
LadyFinger
Tomato

Optional Class

In Java 8, the “[Link]” package included an optional class. The public final class
“Optional” is used to handle NullPointerException in a Java program. You may
give other code or values to execute using Optional. Thus, optional reduces the
number of null checks required to avoid a nullPointerException.

You may use the Optional class to prevent the application from crashing and
terminating unexpectedly. The Optional class has methods for checking the
existence of a value for a given variable.

The following program demonstrates the use of the Optional class.

import [Link];

public class Main{

public static void main(String[] args) {

String[] str = new String[10];

Optional<String>checkNull =

[Link](str[5]);

if ([Link]()) {

String word = str[5].toLowerCase();


[Link](str);

} else

[Link]("string is null");

Output:
String is null

To verify whether the string is null in this application, we utilize the Optional
class’s “ofNullable” attribute. If it is, the user receives the relevant message.

Default And Static Methods In Interfaces

In Java 8, you may add non-abstract methods to interfaces, allowing you to


create interfaces with method implementation. To construct interfaces with
method implementation, use the Default and Static keywords. Lambda
Expression functionality is mostly enabled through default approaches.

You may extend the functionality of your libraries’ interfaces by using default
methods. This ensures that the code created for previous versions is compatible
with the newer interfaces (binary compatibility).

Let’s understand the Default Method with an example:

import [Link];

interface interface_default {
default void default_method(){

[Link]("We are default method of


interface");

class derived_class implements interface_default{

class Main{

public static void main(String[] args){

derived_class obj1 = new derived_class();

obj1.default_method();

Output:
We are the default method of interface

We have an interface called “interface default” with a default implementation of


the function default method(). Next, we create a class called “derived class” that
implements the “interface default” interface.
In this class, we haven’t implemented any interface functions. Then, in the main
function, we construct a “derived class” object and invoke the interface’s “default
method” without specifying it in the class.

The usage of default and static methods in the interface is an example of this. If a
class wishes to alter the default method, it may override it and give its own
implementation.

Java Stream API For Bulk Data Operations On Collections

Another significant feature in Java 8 is the Stream API. The Stream API is used
to handle a collection of items and allows many iterations. A Stream is a
collection of items (elements) that enables you to combine multiple techniques to
achieve your goals.

The [Link] package in Java 8 introduces a new Streams API that


enables you to process components of Java Collections in parallel. Because
Java is inherently sequential, and there is no direct way to implement parallel
processing at the library level, the stream API will fill that void. You may use
Java’s Stream API to filter items of a collection based on a defined condition. If
you have a list of orders, for example, you may combine purchase and sell
orders, filter orders by amount and price, and so on.

Java Date Time API

Under the package [Link], Java 8 offers a new date-time API. The following
are the most prominent classes among them:

 Local: Simplified date-time API with no timezone management complexity.


 Zoned: specialized date-time API that can handle several time zones.

For Example:
Class Description
LocalDate Represents a date (year, month, day (yyyy-MM-dd))
LocalTime Represents a time (hour, minute, second and nanoseconds (HH-mm-ss-ns))
LocalDateTime Represents both a date and a time (yyyy-MM-dd-HH-mm-ss-ns)
DateTimeFormatter Formatter for displaying and parsing date-time objects

Dates

In Java 8, the Date class has been deprecated. The following are the new
courses that have been introduced:

 A date is defined by the LocalDate class. It is devoid of any indication of


time or time zone.
 A time is defined by the LocalTime class. It doesn’t have a date or time-
zone representation.
 A date-time is defined by the LocalDateTime class. It doesn’t have a time-
zone representation

To combine time-zone information with date functions, you may utilize Lambda’s
OffsetDate, OffsetTime, and OffsetDateTime classes. Another class – “ZoneId” –
is used to express the timezone offset here.

Collection API Improvements

The Collection API in Java 8 now includes the following new methods. A few of
them are listed below.

 This is a default method for the Iterator. forEachRemaining (Consumer


action): This is a default method for the Iterator. It repeats the “action” for
the remaining items until all of them have been processed, or the “action”
throws an exception.
 The default technique for removing items from a collection is removed
(Predicate filter). This removes all objects from the collection that satisfy
the supplied “filter.”
 Spliterator () This collection method returns a spliterator object that may be
used to traverse the items sequentially or in parallel.
 ReplaceAll (), calculate(), and merge() are methods in the Map collection.
 The performance of the HashMap class with Key collisions has been
enhanced etc.

Java IO Improvements

The following are some of the IO enhancements made in Java 8:

 [Link] (Path dir): Returns a lazily filled stream, each element of which
represents a directory entry.
 [Link] (Path path): Reads all the lines from a stream.
 [Link] (): Returns a stream filled by a path after searching for files in the
file tree rooted at a provided beginning file and many more.
 [Link] (): Returns a stream containing all of the elements of
BufferedReader’s lines and much more
 Buffered

Miscellaneous Core API Improvements

 ThreadLocal’s static function with initial (Supplier supplier) allows you to


build an instance quickly.
 The default and static methods for natural ordering, reverse order, and
other operations have been added to the “Comparator” interface.
 The min (), max (), and sum () methods are available in the Integer, Long,
and Double wrapper classes.
 The logicalAnd (), logicalOr (), and logicalXor () methods have been added
to the Boolean class.
 The Math class introduces a number of useful techniques.
 The JDBC-ODBC Bridge has been deactivated.
 The memory space used by PermGen is no longer available.

Base64 Encode Decode

For Base64 encoding, Java 8 has built-in encode and decode functions. The
Base64 encoding class in [Link].Base64.
Three Base64 encoders and decoders are provided in this class:

 The output is mapped to a set of characters between A-Za-z0-9+/ in this


version. The encoder does not add a line feed to the output, and the
decoder rejects any character other than the above.
 The filename safe is mapped to the set of characters between A-Za-z0-9+/,
and the output is the URL.
 The output of this sort of encoder is mapped to a MIME-friendly format.

Conclusion

As we can see, Java 8 offers a number of important features. Other programming


languages, such as Scala, have inspired some of the features. Java must
improve in order to avoid becoming outdated, and although certain features are
rudimentary in comparison to other programming languages.

FAQs

Q1: What are the characteristics of Java 8?


Ans: Following are the characteristics of Java 8:

 Lambda expressions
 Method references
 Functional interfaces
 Stream API
 Default methods
 Base64 Encode Decode
 Static methods in interface
 Optional class and many more

Q2: Why is Java 8 still popular?


Ans: The fact that Java 8 is an LTS (Long-Term Support) version is one of the
main reasons for its continued popularity. Regrettably, not all Java versions are
LTS versions! Only Java 8 (2014) and Java 11 (2018) have been recognized as
having LTS since the policy was implemented. All subsequent versions, including
Java 14 and the anticipated Java 15 (September 2020), will be LTS-free.

Q3: What changed in Java 8?


Ans: Some of the significant productivity enhancements are lambda expressions,
the Streams API, and new methods on existing classes.

You might also like