2015-11-30 14 views
12

Java 8 Streamを使用してCollectionからProperty値に一致するオブジェクトを検索します。プロパティ値に一致する一意のオブジェクトを検索するJava 8ストリームAPI

List<Person> objects = new ArrayList<>(); 

個人属性 - >名前、電話番号、メールアドレス。

人物のリストを繰り返し、オブジェクトに一致する電子メールを見つけます。 これはJava 8ストリーム経由で簡単に実行できることがわかりました。しかしそれでもコレクションは返されますか?

例:

List<Person> matchingObjects = objects.stream. 
    filter(p -> p.email().equals("testemail")). 
    collect(Collectors.toList()); 

しかし、私はそれは、常に1つのユニークなオブジェクトを持っていることがわかっています。私たちはCollectors.toListの代わりに何かをすることができるので、私は実際のオブジェクトを直接取得します。オブジェクトのリストを取得する代わりに。

+0

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#findAny--, https://docs.oracle.com/javase/8/docs /api/java/util/stream/Stream.html#findFirst-- –

答えて

37

コレクタを使用する代わりに、findFirstまたはfindAnyを試してみてください。

Optional<Person> matchingObject = objects.stream(). 
    filter(p -> p.email().equals("testemail")). 
    findFirst(); 

リストは、そのオブジェクトが含まれていない可能性がありますので、これはOptionalを返します。

あなたはリストはいつもあなたが呼び出すことができる人が含まれていることを確認している場合:

:そして、そのような人物が存在しない場合、あなたがわからない場合

Person person = matchingObject.get(); 

nullを取得したいです

Person person = matchingObject.orElse(null); 

他の有用な方法も同様に存在する。 Optional javadocをご覧ください。

+0

ありがとうございます。役に立った – Santosh

+3

可能であればorElse(null)を使用することをお勧めしますが。 –

関連する問題