GuavaからOptional Javaへの変換方法if文を一切使用せずにオプションで使用できますか?GuavaからJavaへのオプションの変換
if (maybeSomething.isPresent()) {
return java.util.Optional.of(maybeSomething.get())
} else {
return java.util.Optional.empty()
}
GuavaからOptional Javaへの変換方法if文を一切使用せずにオプションで使用できますか?GuavaからJavaへのオプションの変換
if (maybeSomething.isPresent()) {
return java.util.Optional.of(maybeSomething.get())
} else {
return java.util.Optional.empty()
}
使用グアバ変換
maybeSomething
.transform(java.util.Optional::of).or(java.util.Optional.empty());
これと@ Kayamanのヌルベースのアプローチのどちらかを選択する明白な技術的理由がないのを見て、私はどちらか一方がパフォーマンスの優位性を示すかどうか不思議でした。いくつかの速いパフォーマンステストを行い、実行時間に大きな違いがないことを確認しました。さらに分析すると、ヌルベースのアプローチの場合、かなり多くのオブジェクトが割り当てられます(〜2倍)。だから、私はこの答えが間違いなく最も正しいと思います。 – JakeRobb
約Optional javaOpt = Optional.ofNullable(guavaOpt.orNull());
?
は、それは完全にあなたが現在お使いのグアバのOptionalsで行うの用途に依存します。最初の問題は両方の違いにあります。中でも
:
最初にあなたが判断する必要があるのは、グアバのさまざまな使用方法です。これは同等のJava 8を構築する必要がある方法を調整します。
しかし、両方のためのAPIの違いを考えると、道に沿っていくつかのif
sが避けられないようだ...ここ
私の個人的な提案は、ちょうどすべての道を行くとJava 8のとグアバのすべての現在の使用を置き換えることであろう; 「段階的期間」が必要な場合は、GuavaのOptionalが完全に除外されるまで、必要な方法を廃止し、必要に応じて提供してください。
それは私がダウン投票した私ではありませんでしたが、本当に問題に対処するのではなく、利用可能な2つの「オプション」実装の賛否両論の素晴らしい概観を提供しています。 – Henrik
Guava Release 21はとfromJavaUtil
の変換方法をOptional
クラスに導入しました。 Kayamanの答えで提案として主に実装されているように見えるフードの下
:
public java.util.Optional<T> toJavaUtil() {
return java.util.Optional.ofNullable(orNull());
}
...
public static <T> Optional<T> fromJavaUtil(@Nullable java.util.Optional<T> javaUtilOptional) {
return (javaUtilOptional == null) ? null : fromNullable(javaUtilOptional.orElse(null));
}
詳しいコンテキスト情報が必要とされています。あなたのコードベースは、Guavaのオプションを広範囲に使用していますか?どのようにJava 8に置き換える予定ですか?どのようにグアバのオプションを現在使用していますか? Streamの.findAny()などの既存のインスタンスの使用が期待されますか?まずは移行戦略が必要です – fge
ifステートメントではどうしますか?何か試しましたか? –
APIの移行に関する一般的な問題はありません。このような変換が必要なケースは1つだけです。 – Libre13