Uses of Optional in Java 8

What are the uses of Optional in Java 8?

Answer: Java 8 introduced a new container class java.util.Optional<T>. It wraps a single value, if that value is available. If the value is not available an empty optional should be returned. Thus it represents null value with absent value. This class has various utility methods like isPresent() which helps users to avoid making use of null value checks. So instead of returning the value directly, a wrapper object is returned thus users can avoid the null pointer exception.




Class Declaration

Following is the declaration for java.util.Optional<T> class −
public final class Optional<T>
extends Object

Class Method

S. No.Method & Description
1static <T> Optional<T> empty()
Returns an empty Optional instance.
2boolean equals(Object obj)
Indicates whether some other object is "equal to" this Optional.
3Optional<T> filter(Predicate<? super <T> predicate)
If a value is present and the value matches a given predicate, it returns an Optional describing the value, otherwise returns an empty Optional.
4<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
If a value is present, it applies the provided Optional-bearing mapping function to it, returns that result, otherwise returns an empty Optional.
5T get()
If a value is present in this Optional, returns the value, otherwise throws NoSuchElementException.
6int hashCode()
Returns the hash code value of the present value, if any, or 0 (zero) if no value is present.
7void ifPresent(Consumer<? super T> consumer)
If a value is present, it invokes the specified consumer with the value, otherwise does nothing.
8boolean isPresent()
Returns true if there is a value present, otherwise false.
9<U>Optional<U> map(Function<? super T,? extends U> mapper)
If a value is present, applies the provided mapping function to it, and if the result is non-null, returns an Optional describing the result.
10static <T> Optional<T> of(T value)
Returns an Optional with the specified present non-null value.
11static <T> Optional<T> ofNullable(T value)
Returns an Optional describing the specified value, if non-null, otherwise returns an empty Optional.
12T orElse(T other)
Returns the value if present, otherwise returns other.
13T orElseGet(Supplier<? extends T> other)
Returns the value if present, otherwise invokes other and returns the result of that invocation.
14<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
Returns the contained value, if present, otherwise throws an exception to be created by the provided supplier.
15String toString()
Returns a non-empty string representation of this Optional suitable for debugging.
Note − This class inherits methods from the java.lang.Object class.

Optional Example

To understand how Optional is used in practice, let us see the following example. Write the following program, execute and verify result to get more insight of it.

Java8Tester.java

import java.util.Optional;

public class Java8Tester {
public static void main(String args[]){

Java8Tester java8Tester = new Java8Tester();
Integer value1 = null;
Integer value2 = new Integer(10);

//Optional.ofNullable - allows passed parameter to be null.
Optional<Integer> a = Optional.ofNullable(value1);

//Optional.of - throws NullPointerException if passed parameter is null
Optional<Integer> b = Optional.of(value2);
System.out.println(java8Tester.sum(a,b));
}

public Integer sum(Optional<Integer> a, Optional<Integer> b){

//Optional.isPresent - checks the value is present or not

System.out.println("First parameter is present: " + a.isPresent());
System.out.println("Second parameter is present: " + b.isPresent());

//Optional.orElse - returns the value if present otherwise returns
//the default value passed.
Integer value1 = a.orElse(new Integer(0));

//Optional.get - gets the value, value should be present
Integer value2 = b.get();
return value1 + value2;
}
}


Comments

Popular posts from this blog

Top 16 Mobile App Development Companies in India | App Developers 2017

CCEE CDAC Exam Questions

CDAC CCEE EXAM Prepration Link/PDF [Syllabus Topic Wise ] C++ & DS