Java : OptionalLong with Examples

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


Summary

A container object which may or may not contain a long 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 LongSample class below.

public class LongSample {

    private final long value;

    public LongSample() {
        this.value = -1;
    }

    public LongSample(long value) {
        if (value < 0) {
            throw new IllegalArgumentException();
        }

        this.value = value;
    }

    public OptionalLong getValue() {
        if (value == -1) {
            return OptionalLong.empty();
        } else {
            return OptionalLong.of(value);
        }
    }
}
final var sample = new LongSample(123);

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

// Result
// ↓
//value : 123
final var sample = new LongSample();

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

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

Methods

static OptionalLong empty ()

Returns an empty OptionalLong instance.

final var opt = OptionalLong.empty();
System.out.println(opt); // OptionalLong.empty
System.out.println(opt.isEmpty()); // true
final var opt = OptionalLong.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 OptionalLong.

final var opt1 = OptionalLong.of(100);
final var opt2 = OptionalLong.of(100);
final var opt3 = OptionalLong.of(999);

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

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

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

long getAsLong ()

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

final var sample = new LongSample(123);

final var opt = sample.getValue();
if (opt.isPresent()) {
    System.out.println(opt.getAsLong()); // 123
}
final var sample = new LongSample();
final var opt = sample.getValue();

try {
    final var value = opt.getAsLong();
} 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 = OptionalLong.empty().hashCode();
System.out.println(ret1); // 0

final var ret2 = OptionalLong.of(123).hashCode();
System.out.println(ret2); // 123

final var ret3 = OptionalLong.of(-789).hashCode();
System.out.println(ret3); // 788

void ifPresent (LongConsumer action)

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

final var sample = new LongSample(123);

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

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

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

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

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

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

void ifPresentOrElse (LongConsumer 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 LongSample(123);

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

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

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

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 LongSample(123);

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

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

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 LongSample(123);

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

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

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

// Result
// ↓
//empty!

static OptionalLong of (long value)

Returns an OptionalLong describing the given value.

final var opt1 = OptionalLong.of(123);
System.out.println(opt1); // OptionalLong[123]

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

long orElse (long other)

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

final var sample = new LongSample(100);

final var ret = sample.getValue().orElse(9999);
System.out.println(ret); // 100
final var sample = new LongSample();

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

long orElseGet (LongSupplier supplier)

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

final var sample = new LongSample(100);

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

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

// Result
// ↓
//ret = 100
final var sample = new LongSample();

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

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

// Result
// ↓
//action!
//ret = 9999

long orElseThrow ()

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

final var sample = new LongSample(123);

final var opt = sample.getValue();
if (opt.isPresent()) {
    System.out.println(opt.orElseThrow()); // 123
}
final var sample = new LongSample();
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> long 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 LongSample(123);

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

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

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

LongStream stream ()

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

final var sample = new LongSample(123);

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

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

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 OptionalLong suitable for debugging.

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

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

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

Related posts

To top of page