Stringを指定すると、Optionalを取得する必要があります。これにより、Stringがnullまたは空の場合、結果はOptional.emptyになります。私はこの方法でそれを行うことができます:
String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
ostr = Optional.empty();
}
しかし、もっとエレガントな方法があるはずです。
フィルターを使用できます:
Optional<String> ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty());
ppo
がnullまたは空の場合、空のOptionalを返します。
Apache Commonsの場合:
.filter(StringUtils::isNotEmpty)
Java 11の答え:
var optionalString = Optional.ofNullable(str).filter(Predicate.not(String::isBlank));
String::isBlank
は、より広い範囲の「空の」文字を扱います。
どうですか:
Optional<String> ostr = ppo == null || ppo.isEmpty()
? Optional.empty()
: Optional.of(ppo);
もちろん、頻繁に必要な場合は、ユーティリティメソッドに入れることができます。空の文字列を使用してOptional
を作成しても、それを無視してもメリットはありません。
グアバを使用している場合は、次のことができます。
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