Skip to content

Instantly share code, notes, and snippets.

@shiro01
Created June 8, 2018 03:56
Show Gist options
  • Save shiro01/a2688d91c4c05dbc637a672a49e1987c to your computer and use it in GitHub Desktop.
Save shiro01/a2688d91c4c05dbc637a672a49e1987c to your computer and use it in GitHub Desktop.
Optionalクラスを試してみる。
package test;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class OptionalTest {
public static void main(String[] args) {
/*
* https://docs.oracle.com/javase/jp/8/docs/api/java/util/Optional.html
*/
List<String> strList = new ArrayList<String>();
strList.add("hoge");
strList.add(null);
strList.add("pyo");
strList.add("pyo");
// Optionalを作成
Optional<String> strOptional = Optional.of("テスト文字列");
Optional<List<String>> listOptional = Optional.of(strList);
// 値を持たないOptionalを作成
Optional<String> emptyOptioal = Optional.empty();
// get()で値取得
System.out.println("get() test: " + strOptional.get());
System.out.println("get() test: " + listOptional.get());
// 値を持たないOptionalをget()で値を取得しようとすると例外発生(NullPointerExceptionではない)
try {
System.out.println("get() test: " + emptyOptioal.get());
} catch (Exception e) {
System.out.println("get() test: 例外発生:" + e.getClass().getName() + " : " + e.getMessage());
}
System.out.println("filter() test: " + strOptional.filter(s -> s.equals("テスト文字列")));
// ちょっと気になったので試してみる。
List<Optional<String>> optionalList = new ArrayList<Optional<String>>();
optionalList.add(Optional.of("a"));
optionalList.add(Optional.of("aa"));
optionalList.add(Optional.of("aaa"));
optionalList.add(Optional.of("aaaa"));
optionalList.forEach(op -> System.out.println("filter() test2: " + op.filter(s -> s.length() > 2)));
// 値が存在する場合のみ、その値で処理を実行、それ以外は何もしない
strOptional.ifPresent(str -> {
System.out.println("ifPresent() test: " + str);
});
// 値を持つかどうかのチェック(値が存在する場合isPresent()はtrueを返す)
if (emptyOptioal.isPresent()) {
System.out.println("isPresent() test: " + emptyOptioal.isPresent() + ":値を持つ");
} else {
System.out.println("isPresent() test: " + emptyOptioal.isPresent() + ":値を持たない");
}
// nullの場合は空のOptionalを作成
Optional<String> nullableOptionalNull = Optional.ofNullable(null);
Optional<String> nullableOptionalNotNull = Optional.ofNullable("hoge");
System.out.println("ofNullable(null) test: null を指定:" + nullableOptionalNull.isPresent());
System.out.println("ofNullable(\"hoge\") test: 文字を指定: " + nullableOptionalNotNull.isPresent());
// orElseを使うと値がないい場合のデフォルト値を指定できる。
try {
System.out.println("orElse() test: 値は " + emptyOptioal.orElse("持っていません") + " でしたー");
} catch (Exception e) {
System.out.println("orElse() test: 例外発生:" + e.getClass().getName() + ":" + e.getMessage());
}
// 値が存在する場合はその値を返却、それ以外は指定した例外を投げれる。
try {
System.out.println("orElseThrow() test: " + strOptional.orElseThrow(() -> new Exception("値がないよー")));
System.out.println("orElseThrow() test: " + emptyOptioal.orElseThrow(() -> new Exception("値がないよー")));
} catch (Exception e) {
System.out.println("orElseThrow() test: 例外発生:" + e.getClass().getName() + ":" + e.getMessage());
}
// toString()
System.out.println(strOptional.toString());
System.out.println(emptyOptioal.toString());
System.out.println(listOptional.toString());
}
}
/*
*
//empty()
// 空のOptionalインスタンスを返します。
equals(Object obj)
一部の他のオブジェクトがこのOptionalと等しいかどうかを示します。
//filter(Predicate<? super T> predicate)
// 値が存在し、それが指定された述語に一致する場合はその値を記述するOptionalを返し、そうでない場合は空のOptionalを返します。
flatMap(Function<? super T,Optional<U>> mapper)
値が存在する場合は、指定されたOptional生成マッピング関数をその値に適用し、その結果を返します。そうでない場合は空のOptionalを返します。
//get()
// このOptionalに値が存在する場合は値を返し、それ以外の場合はNoSuchElementExceptionをスローします。
hashCode()
存在する値のハッシュ・コード値(ある場合)を返し、値が存在しない場合は0 (ゼロ)を返します。
//ifPresent(Consumer<? super T> consumer)
// 値が存在する場合は指定されたコンシューマをその値で呼び出し、それ以外の場合は何も行いません。
//isPresent()
// 存在する値がある場合はtrueを返し、それ以外の場合はfalseを返します。
map(Function<? super T,? extends U> mapper)
値が存在する場合は、指定されたマッピング関数をその値に適用し、結果がnullでなければ結果を記述するOptionalを返します。
//of(T value)
// 指定された非null値を含むOptionalを返します。
//ofNullable(T value)
// 指定された値がnullでない場合はその値を記述するOptionalを返し、それ以外の場合は空のOptionalを返します。
//orElse(T other)
// 存在する場合は値を返し、それ以外の場合はotherを返します。
orElseGet(Supplier<? extends T> other)
値が存在する場合はその値を返し、そうでない場合はotherを呼び出し、その呼び出しの結果を返します。
//orElseThrow(Supplier<? extends X> exceptionSupplier)
// 値が存在する場合は、その含まれている値を返し、それ以外の場合は、指定されたサプライヤによって作成された例外をスローします。
//toString()
// デバッグに適しているこのOptionalの空ではない文字列表現を返します。
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment