空の文字列を空のオプションに変換する

1. 前書き

このクイックチュートリアルでは、a __null __またはempty _String_を空の_https://www.baeldung.com/java-optional [Optional] ._ *に*変換するさまざまな方法を紹介します。
_null_から空の_Optional_を取得するのは簡単です— https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html#ofNullable-T-[_Optional.ofNullable()_を使用するだけです]。 しかし、空の__String__sもこのように動作させたい場合はどうでしょうか?
それでは、空の_String_を空の_Optional._に変換するためのいくつかの異なるオプションを調べてみましょう。

2. Java 8の使い方

Java 8では、* Optional_filter_ ’の述語が満たされない場合、空の_Optional _:*を返すという事実を活用できます。
@Test
public void givenEmptyString_whenFilteringOnOptional_thenEmptyOptionalIsReturned() {
    String str = "";
    Optional<String> opt = Optional.ofNullable(str).filter(s -> !s.isEmpty());
    Assert.assertFalse(opt.isPresent());
}
また、_str_がnullの場合、* __ ofNullable __は短絡するため、__null __hereを確認する必要さえありません。*
ただし、述語用に特別なlink:/java-8-lambda-expressions-tips[lambda]を作成するのは少し面倒です。 どうにかしてそれを取り除くことはできませんか?

3. Java 11の使用

上記の願いに対する答えは、実際にはJava 11まで来ません。
Java 11では、_https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html#filter-java.util.function.Predicate- [Optional.filter( )]、_しかし、Java 11では新しい_https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/Predicate.html#not(java。 util.function.Predicate)[Predicate.not()] _メソッド参照の否定を簡単にするAPI。
それで、以前にやったことを単純化し、代わりにメソッド参照を使用します:
@Test
public void givenEmptyString_whenFilteringOnOptionalInJava11_thenEmptyOptionalIsReturned() {
    String str = "";
    Optional<String> opt = Optional.ofNullable(str).filter(Predicate.not(String::isEmpty));
    Assert.assertFalse(opt.isPresent());
}

4. グアバの使用

また、https://www.baeldung.com/guava-functions-predicates [Guava]を使用してニーズを満たすこともできます。 ただし、その場合は、少し異なるアプローチを使用します。
Optional_Optional#ofNullable_の結果で_filter_ methodを呼び出す代わりに、最初にGuavaの_String#emptyToNull_を使用して空の_String_を_null_に変換してから、それを_Optional#ofNullable_に渡します。
@Test
public void givenEmptyString_whenPassingResultOfEmptyToNullToOfNullable_thenEmptyOptionalIsReturned() {
    String str = "";
    Optional<String> opt = Optional.ofNullable(Strings.emptyToNull(str));
    Assert.assertFalse(opt.isPresent());
}

5. 結論

この短い記事では、空の_String_を空の_Optional._に変換するさまざまな方法を検討しました。
いつものように、この記事で使用される例はhttps://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-11[GitHubプロジェクト]にあります。