2017-03-01 18 views
0

這裏,我們有有兩種基本屬性 - 1.姓名2. 價值過濾鍵值對的列表,如果key不存在

我想獲得的值帕拉姆對象的列表有PARAM使用於流

return paramList.stream().filter(param -> 
param.getName().equalsIgnoreCase("param_name")) 
       .findAny() 
       .map(param -> param.getValue()).get(); 

一個特定的名稱,但此方法對我NullPointerException異常如果在一個具有名稱列表「PARAM_NAME」沒有這樣的參數對象。我怎樣才能避免它,並取而代之的是一個空值。

+2

閱讀可選的javadoc。這裏都有解釋。閱讀您正在使用的類的javadoc總是一個好主意。 –

+1

[Java 8可選Javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html)...查看'get'和'orElse'。難道它也是,你的'getName'可能有'null's? – Roland

+0

Param的getName()永遠不爲null,它只是可能的,列表中沒有元素具有name property =「param_name」,我正在尋找 –

回答

1

您可以過濾那些不存在的可選項。這樣

.map(param -> param.getValue()) 
.filter(Optional::isPresent) 
.map(Optional::get) 
.findAny() 
.orElse("Not Found"); 
2

東西,我假設getName() -calls之一拋出一個NullPointerException,爲get()拋出一個NoSuchElementException,如果它是空的,沒有其他可能的null小號除了paramList本身。

一個可行的辦法來獲得一個默認值,如果你不能找到一個param"param_name"是:

paramList.stream() 
     .filter(Objects::nonNull) // filters out null params 
     .filter(param -> Objects.nonNull(param.getName())) // filters out params with name null 
     .filter(param -> param.getName().equalsIgnoreCase("param_name")) 
     .findAny() 
     .map(param -> param.getValue()) // or .map(ParamClass::getValue) 
     .orElse(null); // your default 

您可能還需要有一個看看Optional javadoc

如果您的getName-方法比我們實際期望的要多,您可能需要用try/catch-聲明包圍它。

相關問題