Java 8 Features
Java 8 was a major release that introduced several new features and improvements to the Java programming language. Some of the most notable features include:
- Lambdas: Lambdas are anonymous functions that can be created without being bound to a name. They provide a concise and efficient way to write functional-style code in Java. For example:
import java.util.Arrays;
import java.util.List;
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(n -> System.out.println(n));In this example, a List
of Integer
s is created and then the forEach
method is used to iterate over the elements in the list. The forEach
method takes a Consumer
functional interface as its argument, which represents an operation that takes a single input argument and returns no result. The lambda expression n -> System.out.println(n)
is passed as the argument to the forEach
method and represents an operation that takes an Integer
as input and prints it to the console.
- Streams: Streams are sequences of elements that can be processed in parallel or sequentially. They provide a way to process collections of data in a functional-style. For example:
import java.util.Arrays;
import java.util.List;
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().mapToInt(n -> n).sum();
System.out.println("Sum: " + sum);
In this example, a List
of Integer
s is created and then the stream
method is used to create a stream from the elements in the list. The mapToInt
method is used to convert the stream of Integer
s to a stream of primitive int
s. The sum
method is used to compute the sum of the elements in the stream.
- Default Methods: Default methods allow you to add new methods to existing interfaces without breaking existing code. For example:
interface Formula {
double calculate(int a);
default double sqrt(int a) {
return Math.sqrt(a);
}
}
Formula formula = (a) -> Math.sqrt(a);
System.out.println(formula.calculate(100));
System.out.println(formula.sqrt(16));
In this example, the Formula
interface is defined with a single abstract method calculate
and a default method sqrt
. The Formula
interface is then implemented by a lambda expression that implements the calculate
method. The sqrt
method is automatically available to all implementations of the Formula
interface, without requiring any additional code to be written.
- Optional: The
Optional
class is a container object that is used to represent the presence or absence of a value. It provides a way to handle the case where a value may be missing, without usingnull
. For example:
import java.util.Optional;
Optional<String> optional = Optional.of("value");
if (optional.isPresent()) {
System.out.println(optional.get());
}
In this example, an Optional
object is created from a string value. The isPresent
method is used to check if the Optional
object contains a value, and the get
method is used to retrieve the value if it is present. If the Optional
object is empty, then the get
method will throw an exception. The Optional
class provides several other methods for working with optional values, such as orElse
and orElseGet
, which allow you to specify a default value or a default value supplier to be used if the Optional
object is empty.
- Date and Time API: The new Date and Time API provides a comprehensive and flexible way to represent and manipulate date and time values. For example:
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
System.out.println("Date: " + date.format(formatter));
System.out.println("Time: " + time);
System.out.println("Date Time: " + dateTime);
In this example, the LocalDate
, LocalTime
, and LocalDateTime
classes are used to represent date, time, and date-time values, respectively. The now
method is used to create a new instance of each class that represents the current date, time, or date-time. The DateTimeFormatter
class is used to format the date and time values as strings, using a specified pattern.
These are just a few examples of the new features and improvements that were introduced in Java 8. The new features provide more concise and expressive ways to write code, and make it easier to write functional-style code in Java.
Leave a Comment