2016-09-28 5 views
1

カスタム関数を書くより良い方法はありますか?好ましくは株式JDKでですか?java.util. ​​java.lang.Iterableのオプション?

ない場合は、そこには、次のより良い実装です:

public static <T> Iterable<T> toIterable(Optional<T> o) { 
    if (o.isPresent()) { 
     return Collections.singletonList(o.get()); 
    } else { 
     return Collections.emptyList(); 
    } 
} 
+3

Java 9では、Iterable iterable =() - > o.stream()。iterator(); 'を実行できます。 – shmosel

答えて

4

Optional.isPresent()を使用するには、通常、コードのにおいである - それは!= nullと違いはありません。

public static <T> Iterable<T> toIterable(Optional<T> o) { 
    return o.map(Collections::singleton) 
      .orElseGet(Collections::emptySet); 
} 

また、シングルトンSetは...よくsingletonのためのより良いモデルです。

+0

シングルトンについて言えば、 'Collections.emptySet()'はシングルトンを返します。サプライヤの使用にはあまり意味がありません。 – shmosel

+0

@shmoselフェアポイント。ただし、それは 'orElse(Collections.emptySet())'や 'orElseGet(Collections :: emptySet)'に大きな違いがあるかどうかは分かりません。さらに、JavaDocは、 "独立した' Set'_を生成しない必要があります - 同じ 'Set'を返すことは実装固有のものです。 –

+0

次の文を削除しました。 :) – shmosel

関連する問題