Java8 Optional

Optionalとは

nullを包んで、値を操作するクラス

Optionalインスタンス生成

int i1 = 0;
Optional<Integer> i2 = Optional.of(i2);

非null判定

Integer i1 = 5;
Boolean isPresent = i1.isPresent(); // true

nullのOptionalインスタンス生成

Optional<Integer> i = Optional.empty(); // null

isPresent = i.isPresent(); // false

Stringクラスのnullとは違う
Optional<Integer> i = Optional.empty();
Boolean isNull = (i == null); // false

String s = null;
Boolean isNull = (s == null); // true

null時の代替値

Integer i1 = null;
Integer i2 = Optional.ofNullable(i1).orElse(-1); // -1


private final static List<Integer> list = Arrays.asList(new Integer[]{1, 2, null});

private static Optional<Integer> get(int index){
 return Optional.ofNullable(list.get(index));
}

private static Integer get(int index){
 return Optional.ofNullable(list.get(index)).orElse(0);
}

nullを除外するメソッドを利用して値を取得
Optional<Integer> i1 = get(0); // 1
Optional<Integer> i2 = get(1); // 2
Optional<Integer> i3 = get(2); // null

listからnullを除外して直接値を取得する
↑の様にメソッドでnullを除外する方が良い
Integer i4 = Optional.ofNullable(list.get(1)).orElse(-1); // 2
Integer i5 = Optional.ofNullable(list.get(2)).orElse(-1); // -1