/*
* Copyright (C) 2007-2015, GoodData(R) Corporation. All rights reserved.
*/
package net.javacrumbs.optional;
import java.util.Optional;
import java.util.stream.Stream;
import static java.util.Optional.ofNullable;
public class ProcessOptionals {
public static void main(String[] args) {
Optional<String> optional = Stream.of("test").filter(s -> s.startsWith("t")).findFirst();
if (optional.isPresent()) optional.get(); //may throw NoSuchElementException
optional.ifPresent(System.out::println);
System.out.println(optional.orElse("default"));
testNormal();
testOptional();
}
private static void testNormal() {
System.out.println("\nNormal:");
User user = new User();
Address result1 = user.getAddress() != null ? user.getAddress() : new Address();
Address result2 = ofNullable(user.getAddress()).orElse(new Address());
Address address = new Address();
user.setAddress(address);
address.setStreet("Street");
if (user != null) {
if (user.getAddress() != null) {
if (user.getAddress().getStreet() != null) {
if (user.getAddress().getStreet().length() > 3) {
System.out.println(user.getAddress().getStreet());
}
}
}
}
System.out.print("Normal map.ifPresent: ");
Optional.ofNullable(user).map(User::getAddress).map(Address::getStreet)
.filter(s -> s.length() > 3).ifPresent(System.out::println);
System.out.println();
}
private static void testOptional() {
System.out.println("Optional:");
OUser user = new OUser();
//user.getAddress().get(); //throws NoSuchElementException
OAddress address = new OAddress();
user.setAddress(address);
System.out.print("map.ifPresent: ");
// Map returns optional of the result. If the result is optional, returns Optional of Optional
user.getAddress().map(OAddress::getStreet).ifPresent(System.out::println);
System.out.println("flatMap.ifPresent: ");
user.getAddress().flatMap(OAddress::getStreet).map(String::length).ifPresent(System.out::println);
}
}