groovy789's blog

技術系備忘録φ(..)メモメモ

引き続きjava8でも(´・ω・`)
java8で導入されたOptionalをちょっと試す。

public class Sample {
    public static void main(String[] args) {
        // 値が設定されているオプショナル
        Optional<String> o = Optional.of("test");
        // 値取得の場合は、nullチェックが必要
        if (o.isPresent()) {
            System.out.println(o.get());
        }
        // クロージャで
        o.ifPresent(s -> System.out.println(s));

        // 空のオプショナル
        Optional<Object> empty = Optional.empty();
        // デフォルト値
        System.out.println(empty.orElse("デフォルト"));
        // クロージャで
        System.out.println(empty.orElseGet(() -> "デフォルト"));
        try {
            // 例外をthrow
            System.out.println(empty.orElseThrow(() -> new Exception("例外")));
        } catch (Exception ex) {
            Logger.getLogger(Sample.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        // モナド
        Optional.ofNullable("java").map(st -> st.toUpperCase()).ifPresent(st -> System.out.println("s:" + st));
        String res = Optional.ofNullable((String) null).map(st -> st.toUpperCase()).orElse("s:null");
        System.out.println(res);
    }
}