web-dev-qa-db-ja.com

Java 8、Optional.emptyの空の文字列のOptional <String>を変換します

Stringを指定すると、Optionalを取得する必要があります。これにより、Stringがnullまたは空の場合、結果はOptional.emptyになります。私はこの方法でそれを行うことができます:

String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
    ostr = Optional.empty();
}

しかし、もっとエレガントな方法があるはずです。

42
Germán Bouzas

フィルターを使用できます:

Optional<String> ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty());

ppoがnullまたは空の場合、空のOptionalを返します。

74
assylias

Apache Commonsの場合:

.filter(StringUtils::isNotEmpty)
16
Feeco

Java 11の答え:

var optionalString = Optional.ofNullable(str).filter(Predicate.not(String::isBlank));

String::isBlankは、より広い範囲の「空の」文字を扱います。

5

どうですか:

Optional<String> ostr = ppo == null || ppo.isEmpty()
    ? Optional.empty()
    : Optional.of(ppo);

もちろん、頻繁に必要な場合は、ユーティリティメソッドに入れることができます。空の文字列を使用してOptionalを作成しても、それを無視してもメリットはありません。

3
Jon Skeet

グアバを使用している場合は、次のことができます。

Optional<String> ostr = Optional.ofNullable(Strings.emptyToNull(ppo));

Mapを使用できます:

String ppo="";
Optional<String> ostr = Optional.ofNullable(ppo)
                                .map(s -> s.isEmpty()?null:s);
System.out.println(ostr.isPresent()); // prints false
2
Eran