Java : OptionalDouble with Examples

OptionalDouble (Java SE 21 & JDK 21) with Examples.
You will find code examples on most OptionalDouble methods.


Summary

A container object which may or may not contain a double value. If a value is present, isPresent() returns true. If no value is present, the object is considered empty and isPresent() returns false.

Class diagram

Code examples on this page uses the DoubleSample class below.

public class DoubleSample {

    private final double value;

    public DoubleSample() {
        this.value = -1.0;
    }

    public DoubleSample(double value) {
        if (value < 0.0) {
            throw new IllegalArgumentException();
        }

        this.value = value;
    }

    public OptionalDouble getValue() {
        if (value < 0.0) {
            return OptionalDouble.empty();
        } else {
            return OptionalDouble.of(value);
        }
    }
}
final var sample = new DoubleSample(1.23);

sample.getValue().ifPresent(value -> {
    System.out.println("value : " + value);
});

// Result
// ↓
//value : 1.23
final var sample = new DoubleSample();

sample.getValue().ifPresentOrElse(value -> {
    System.out.println("value : " + value);
}, () -> {
    System.out.println("value : empty!");
});

// Result
// ↓
//value : empty!

Methods

static OptionalDouble empty ()

Returns an empty OptionalDouble instance.

final var opt = OptionalDouble.empty();
System.out.println(opt); // OptionalDouble.empty
System.out.println(opt.isEmpty()); // true
final var opt = OptionalDouble.empty();

try {
    final var value = opt.orElseThrow();
} catch (NoSuchElementException e) {
    System.out.println(e);
}

// Result
// ↓
//java.util.NoSuchElementException: No value present

boolean equals (Object obj)

Indicates whether some other object is "equal to" this OptionalDouble.

final var opt1 = OptionalDouble.of(100.0);
final var opt2 = OptionalDouble.of(100.0);
final var opt3 = OptionalDouble.of(999.0);

System.out.println(opt1.equals(opt2)); // true
System.out.println(opt1.equals(opt3)); // false
final var opt1 = OptionalDouble.of(1.23);
final var opt2 = OptionalDouble.empty();

System.out.println(opt1.equals(opt2)); // false
final var opt1 = OptionalDouble.empty();
final var opt2 = OptionalDouble.empty();

System.out.println(opt1.equals(opt2)); // true

double getAsDouble ()

If a value is present, returns the value, otherwise throws NoSuchElementException.

final var sample = new DoubleSample(1.23);

final var opt = sample.getValue();
if (opt.isPresent()) {
    System.out.println(opt.getAsDouble()); // 1.23
}
final var sample = new DoubleSample();
final var opt = sample.getValue();

try {
    final var value = opt.getAsDouble();
} catch (NoSuchElementException e) {
    System.out.println(e);
}

// Result
// ↓
//java.util.NoSuchElementException: No value present

int hashCode ()

Returns the hash code of the value, if present, otherwise 0 (zero) if no value is present.

final var ret1 = OptionalDouble.empty().hashCode();
System.out.println(ret1); // 0

final var ret2 = OptionalDouble.of(1.23).hashCode();
System.out.println(ret2); // 1158867386

final var ret3 = OptionalDouble.of(-0.789).hashCode();
System.out.println(ret3); // 1383618319

void ifPresent (DoubleConsumer action)

If a value is present, performs the given action with the value, otherwise does nothing.

final var sample = new DoubleSample(1.23);

System.out.println("-- ifPresent --");
sample.getValue().ifPresent(value -> {
    System.out.println("  action : " + value);
});

System.out.println("-- end --");

// Result
// ↓
//-- ifPresent --
//  action : 1.23
//-- end --
final var sample = new DoubleSample();

System.out.println("-- ifPresent --");
sample.getValue().ifPresent(value -> {
    System.out.println("  action : " + value);
});

System.out.println("-- end --");

// Result
// ↓
//-- ifPresent --
//-- end --

void ifPresentOrElse (DoubleConsumer action, Runnable emptyAction)

If a value is present, performs the given action with the value, otherwise performs the given empty-based action.

final var sample = new DoubleSample(1.23);

System.out.println("-- ifPresentOrElse --");
sample.getValue().ifPresentOrElse(value -> {
    System.out.println("  action : " + value);
}, () -> {
    System.out.println("  emptyAction!");
});

System.out.println("-- end --");

// Result
// ↓
//-- ifPresentOrElse --
//  action : 1.23
//-- end --
final var sample = new DoubleSample();

System.out.println("-- ifPresentOrElse --");
sample.getValue().ifPresentOrElse(value -> {
    System.out.println("  action : " + value);
}, () -> {
    System.out.println("  emptyAction!");
});

System.out.println("-- end --");

// Result
// ↓
//-- ifPresentOrElse --
//  emptyAction!
//-- end --

boolean isEmpty ()

If a value is not present, returns true, otherwise false.

final var sample = new DoubleSample(1.23);

if (sample.getValue().isEmpty()) {
    System.out.println("empty!");
} else {
    System.out.println("present!");
}

// Result
// ↓
//present!
final var sample = new DoubleSample();

if (sample.getValue().isEmpty()) {
    System.out.println("empty!");
} else {
    System.out.println("present!");
}

// Result
// ↓
//empty!

boolean isPresent ()

If a value is present, returns true, otherwise false.

final var sample = new DoubleSample(1.23);

if (sample.getValue().isPresent()) {
    System.out.println("present!");
} else {
    System.out.println("empty!");
}

// Result
// ↓
//present!
final var sample = new DoubleSample();

if (sample.getValue().isPresent()) {
    System.out.println("present!");
} else {
    System.out.println("empty!");
}

// Result
// ↓
//empty!

static OptionalDouble of (double value)

Returns an OptionalDouble describing the given value.

final var opt1 = OptionalDouble.of(1.23);
System.out.println(opt1); // OptionalDouble[1.23]

final var opt2 = OptionalDouble.of(-0.789);
System.out.println(opt2); // OptionalDouble[-0.789]

double orElse (double other)

If a value is present, returns the value, otherwise returns other.

final var sample = new DoubleSample(100.0);

final var ret = sample.getValue().orElse(9999.0);
System.out.println(ret); // 100.0
final var sample = new DoubleSample();

final var ret = sample.getValue().orElse(9999.0);
System.out.println(ret); // 9999.0

double orElseGet (DoubleSupplier supplier)

If a value is present, returns the value, otherwise returns the result produced by the supplying function.

final var sample = new DoubleSample(100.0);

final var ret = sample.getValue().orElseGet(() -> {
    System.out.println("action!");
    return 9999.0;
});

System.out.println("ret = " + ret);

// Result
// ↓
//ret = 100.0
final var sample = new DoubleSample();

final var ret = sample.getValue().orElseGet(() -> {
    System.out.println("action!");
    return 9999.0;
});

System.out.println("ret = " + ret);

// Result
// ↓
//action!
//ret = 9999.0

double orElseThrow ()

If a value is present, returns the value, otherwise throws NoSuchElementException.

final var sample = new DoubleSample(1.23);

final var opt = sample.getValue();
if (opt.isPresent()) {
    System.out.println(opt.orElseThrow()); // 1.23
}
final var sample = new DoubleSample();
final var opt = sample.getValue();

try {
    final var value = opt.orElseThrow();
} catch (NoSuchElementException e) {
    System.out.println(e);
}

// Result
// ↓
//java.util.NoSuchElementException: No value present

<X extends Throwable> double orElseThrow (Supplier<? extends X> exceptionSupplier)

If a value is present, returns the value, otherwise throws an exception produced by the exception supplying function.

final var sample = new DoubleSample(1.23);

final var opt = sample.getValue();
if (opt.isPresent()) {
    final var value = opt.orElseThrow(IllegalStateException::new);
    System.out.println(value); // 1.23
}
final var sample = new DoubleSample();

try {
    final var value = sample.getValue().orElseThrow(() -> {
        throw new IllegalStateException("empty!");
    });
} catch (IllegalStateException e) {
    System.out.println(e);
}

// Result
// ↓
//java.lang.IllegalStateException: empty!

DoubleStream stream ()

If a value is present, returns a sequential DoubleStream containing only that value, otherwise returns an empty DoubleStream.

final var sample = new DoubleSample(1.23);

final var array = sample.getValue().stream().toArray();
System.out.println(Arrays.toString(array)); // [1.23]

final var count = sample.getValue().stream().count();
System.out.println(count); // 1
final var sample = new DoubleSample();

final var array = sample.getValue().stream().toArray();
System.out.println(Arrays.toString(array)); // []

final var count = sample.getValue().stream().count();
System.out.println(count); // 0

String toString ()

Returns a non-empty string representation of this OptionalDouble suitable for debugging.

final var ret1 = OptionalDouble.empty().toString();
System.out.println(ret1); // OptionalDouble.empty

final var ret2 = OptionalDouble.of(1.23).toString();
System.out.println(ret2); // OptionalDouble[1.23]

final var ret3 = OptionalDouble.of(-0.789).toString();
System.out.println(ret3); // OptionalDouble[-0.789]

Related posts

To top of page