2016-05-17 44 views
1

說我有一個列表收件人,併爲地址的屬性是
1. ID
2名
3.國家
然後,我有一個get方法來獲取通過ID地址如何返回對象與Java的lambda表達式

public Address get(Integer id) { 
    for (Address myAddress : addresses) { 
     if (myAddress.getId() == id) { 
      return myAddress; 
     } 
    } 
    return null; 
} 

這是怎麼會看不lambda表達式
如何使用返回lambda表達式的地址?

+0

可能重複:http://stackoverflow.com/questions/23696317/java -8-find-first-element-by-predicate –

回答

1

它應該根據自己的背景是這樣的:

// Find any address that matches 
addresses.stream().filter(a -> a.getId() == id).findAny(); 

// Find the first address that matches 
addresses.stream().filter(a -> a.getId() == id).findFirst(); 

第一種方法的情況下,大多是有趣的要並行使用addresses.parallelStream().filter(a -> a.getId() == id).findAny()搜索,它會快很多而不是第二種方法,因爲只要我們有結果就會停止尋找。第二種方法更有趣,如果你不打算並行化它,這似乎是你的情況。

所以最後給出:

public Address get(Integer id) { 
    return addresses.stream() 
     .filter(a -> a.getId() == id) 
     .findFirst().orElse(null); 
} 
+0

呃,你爲什麼不寫'return result.orElse(null)'? –

+0

@LouisWasserman +1 –

+0

@LouisWasserman固定thx –

0

我會做到這一點:

public Address get(Integer id) { 
    return addresses.stream() 
     .filter(a -> a.getId().equals(id)) 
     .findFirst() 
     .orElse(null); 
} 

乾杯

+0

ahhh我明白了,我在最後錯過了findFirst()。同樣在你的過濾器中,它應該是getId()== id;),但它的工作原理。謝謝! –

+1

您的意思是您的Address對象包含一個int類型的id字段,但您的方法簽名是Integer id? –

+0

對不起,我應該澄清一點。 –