2017-06-29 4 views
1

Java 8を使用してこれを変換する方法の例を教えてください。今までJava 8へのnullチェックの変換オプション

  Motion motion = new Motion(); 

      if (null!= site.getLocation() && null != site.getLocation().getLatitude() && null != site.getLocation().getLongitude()) { 
       Point p = GeoJson.point(site.getLocation().getLatitude(), site.getLocation().getLongitude()); 
       motion.setLocation(p); 
      } 

私は、私の愚見で `Optional.ofNullable(FOO).isPresent()` FOO 'よりも悪いです!= null`なのでと `ということである。この

Motion motion = new Motion(); 
    Optional<Location> locationOptional = Optional.ofNullable(site.getLocation()); 
    Point p = locationOptional 
      .map(location -> { 
        if (Optional.ofNullable(location.getLatitude()).isPresent() && Optional.ofNullable(location.getLongitude()).isPresent()) { 
         return GeoJson.point(location.getLatitude(), location.getLongitude()); 
        } 
        return null; 
       }) 
     .orElse(null); 
    motion.setLocation(p); 
+5

を行いますorElse(null) 'は単に' Optional'の目的を破っています。 2番目のオプションが最初のオプションよりも冗長で無駄に複雑であることがはっきりとわかるので、簡単にするために質問を提示して、実際のコードではないことを祈っています。 –

+0

私はバニラのヌルチェックよりも利点がありません。オプションの利点と使用例を説明できる人はいますか? – TimSchwalbe

+3

リターンパラメータとして 'Optional'を使う利点があります。あなたのインターフェイス/ apiで、 'Object'ではなく' Optional 'を返すと、ヌルチェックをする必要のあるそのAPIとインターフェイスする次の開発者に丁寧に知らせます。チェーン化されたメソッドを扱うときには、 'オプション'も使い勝手が悪いです。しかし、IMO、地元の「オプション」を宣言する理由は全くないはずです。 –

答えて

8
GeoJson geoJson = 
    Optional.ofNullable(s.getLocation()) 
      .filter(l -> l.getLatitude() != null) 
      .filter(l -> l.getLongitude() != null) 
      .map(l -> GeoJson.point(l.getLatitude(), l.getLongitude())) 
      .orElse(null); 
+1

またはその代わりに、 'orElse(ヌル)の' 'と直接値を設定見ることができますifPresent(モーション:: setLocation) ' – ledniov