Tuesday, August 21, 2018

Java8 - OptionalLong Class Example

java.util.OptionalLong

OptionalLong class is introduced in java8 along with OptionalInt and OptionalDouble. This is an optional container for long values that may or may not contain empty or nonempty values.
if long value is present,isPresent() method returns true. getAsLong() method returns long value.OptionalLong is a primitive long version of Optional class whereas Optional is an Optional class for Long Object. It is defined java.util package since java8 version

Creation Empty OptionalLong Instance

empty() method creates OptionalLong instance. There is no object presented with this. isPresent() method returns false, false meaning absence of values

OptionalLong emptyOptionalLong= OptionalLong.empty();
System.out.println(emptyOptionalLong.isPresent()); // returns false

Create OptionalLong Instance with not null values.

OptionalLong.of(long) method creates an OptionalLong instance with the long value presented in it.
  OptionalLong valueOptionalLong = OptionalLong.of(51); 
System.out.println(valueOptionalLong.isPresent()); // returns true

ifPresentOrElse() method example

ifPresentOrElse method checks, if value exists, apply consumer on the value, else empty value
  OptionalLong optionalLongvalue = OptionalLong.of(5); 
optionalLongvalue.ifPresentOrElse((value) ->{
System.out.println("data exists: " + value);
}, () -> {
System.out.println("Not exists"); 
});
 
data exists: 5

getAsLong() method example

getAsLong() method returns value if present, else throws NoSuchElementException
OptionalLong optionalLong = OptionalLong.of(20);
System.out.println(optionalLong.getAsLong());
output is
20

OptionalLong Example

This is an example of usage of Lambda expression with OptionalLong and utility methods like empty(),of(int),ifPresentOrElse()
OptionalLong emptyOptionalLong = OptionalLong.empty(); 
OptionalLong valueOptionalLong= OptionalLong.of(58); 
valueOptionalLong.ifPresentOrElse((value) -> {
System.out.println("data exists: " + value);
}, () -> {
System.out.println("Not exists"); 
});
emptyOptionalLong.ifPresentOrElse((value) -> {
System.out.println("data exists: " + value);
}, () -> {
System.out.println("Not exists"); 
});
data exists: 58
Not exists

How to Convert OptionalLong to Long in java8

OptionalLong.getAsLong() method returns primitive long value. Follow is an example for Convert to primitive long value
long longValue =0;
OptionalLong optionalLong = OptionalLong.of(4);
if(optionalLong.isPresent()) {
longValue=optionalLong.getAsLong();
}
System.out.println(longValue); // output 4
Output is
4
Not exists

Convert long to OptionalLong in java8

OptionalLong.of() method used to create OptionalLong with non empty long value.
Syntax
public static OptionalLong of(long value)
This takes long Value as input and returns OptionalLong object.
long longValue = 121l;
OptionalLong optionalLong = OptionalLong.of(longValue);
System.out.println(optionalLong.isPresent()); // returns true  
System.out.println(optionalLong.getAsLong()); // returns 121  
true
121

Difference between OptionalLong and Optional<Long> in java8?

Optional<Long>.get() returns Long Object
OptionalLong.getAsLong() method returns long primitive value
IntStream and OptionalLong objects of long value have a posiblility of nullpointerexception
Optional<Long> and Stream<Long> for long value acts as extra wrapper to avoid null exceptions.

Methods

OptionalInt provides many utilities for handling available and not available.
Method Description
empty() Empty OptionalLong Instance will be created
getAsLong() Return long value, if value exists in OptionalLong, Else NoSuchElementException
ifPresent(LongConsumer consumer) Executes LongConsumer, if value exists in OptionalLong, else do nothing
isPresent() Returns true, if value exists in OptionalLong, else returns false
of(long value) Creation of OptionalLong with non null values, if null is passed, NullPointerException thrown and OptionalLong object will not be initlized
orElse(long other) Return default value if value is not presented in OptionalLong
orElseGet(LongSupplier other) Returns value if value presented in OptionalLong, else supplier is being called and result this will be returned
orElseThrow(Supplier exceptionSupplier) Returns value if value presented in OptionalLong, else supplier is being called and throws an error

Related article


EmoticonEmoticon