2015-04-05 69 views
2

如何將此代碼轉換爲Java 8流?如何將普通的Java for-loop轉換爲Java 8流?

String getFirst(String key) { 
    for (Param p : params) { 
     if (key.equals(p.getKey())) { 
      if (!p.getValues().isEmpty()) { 
       return p.getValues().get(0); 
      } 
     } 
    } 
    return ""; 
} 
+2

一些IDE會爲你做這個轉換。我建議你看看IDE是否會爲你做到這一點。 – 2015-04-05 01:05:33

回答

8
return params.stream() 
    .filter(p -> key.equals(p.getKey()) 
    .filter(p -> ! p.getValues().isEmpty()) 
    .map(p -> p.getValues().get(0)) 
    .findFirst() 
    .orElse(""); 

如果p.getValues()List,你可以縮短爲:

return params.stream() 
    .filter(p -> key.equals(p.getKey()) 
    .flatMap(p -> p.getValues().stream()) 
    .findFirst() 
    .orElse(""); 

如果不是重要的是得到了第一匹配值,您沒有問題剛開任何匹配,用findAny()替換findFirst()。它會更清楚地表明你的意圖,如果稍後有人讓這個流平行,findAny()可能會表現更好。

+0

兩個過濾器可以合併爲一個謂詞以提高效率。 – Vadzim 2015-07-29 12:56:47