2016-08-22 17 views
-1

私はオブジェクトのリストを含むオブジェクトのリストを持っていて、コンテナ内のアイテムの1つを取得したいと思います。ラムダを使ってこれを行うことは可能ですか、あるいは単にループのためにネストする必要はありますか?Java 8リスト内のリストをフィルタリングする

for (Container c : containers) { 
    for (Item i : c.getItems() { 
     if (i.getKey().equals(key)) return i; 
    } 
} 
+1

「containers.stream()」のようなものflatMap(c - > c.getItems()。stream())filter(i - > i.getKey()。equals(key))。findFirst().Else (null); ' –

+0

@ Jean-FrançoisSavardあなたのコメントは表示されませんでした。 –

答えて

6

ネストされたが、ループに適しています:

は、ここで私はアイテムを見つけるために使用し、現在の方法です。あなたはストリームを使用してそれを実行したい場合は、この操作を行うことができます。

containers.stream() 
      .flatMap(c -> c.getItems().stream()) 
      .filter(i -> i.getKey().equals(key)) 
      .findFirst(); 

これは、それ以外の場合は、見つかった場合Item、または空Optionalが含まれているOptionalを返します。

+0

ありがとう、それはまさに私が探していたものです。 –

関連する問題