Created
June 8, 2018 03:56
-
-
Save shiro01/a2688d91c4c05dbc637a672a49e1987c to your computer and use it in GitHub Desktop.
Optionalクラスを試してみる。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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