1. 序章

このクイックチュートリアルでは、nullまたは空の文字列を空のオプションに変換するさまざまな方法を紹介します。

nullから空のOptionalを取得するのは簡単です。Optional.ofNullable()を使用するだけです。 しかし、空のStringもこのように機能させたい場合はどうでしょうか。

それでは、空のStringを空のOptionalに変換するためのいくつかの異なるオプションを調べてみましょう。

2. Java8の使用

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をチェックする必要もありません。

ただし、述語用に特別な lambda を作成するのは、少し面倒です。 どういうわけかそれを取り除くことはできませんか?

3. Java11の使用

上記の願いに対する答えは、実際にはJava11まで来ません。

Java 11では、引き続きOptional.filter()、を使用しますが、Java 11では、メソッドを簡単に否定できる新しい 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. グアバの使用

Guavaを使用してニーズを満たすこともできます。 ただし、その場合は、少し異なるアプローチを使用します。

Optional#ofNullableの結果に対してfilter メソッドを呼び出す代わりに、最初にGuavaを使用して空のStringnullに変換します。 String#emptyToNull そしてそれを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に変換するさまざまな方法について説明しました。

いつものように、この記事で使用されている例は、GitHubプロジェクトにあります。