2016-03-24 30 views
1

所以我有一個JSON輸入,這樣的事情:傑克遜JsonNode和Java流返回可選空

{ 
    "a":"something", 
    "b":"something2" 
} 

這個輸入就可以派上其他2種形式:

{ 
    "a":"something", 
    "b":"" 
} 

而且

{ 
    "a":"something" 
} 

我有一個這樣的輸入類,我將它存儲在:

public class Foo { 
    private String a; 
    private Optional<String> b; 
} 

在後面的兩種情況下,我想將b存儲爲Optional.empty()。我已經找到了如何做到這一點在第三的情況下用這行代碼:

Optional.ofNullable(inputNode.get("b")).map(node -> node.asText()) 

這非常適用於第三個情況。它返回Optional.empty。但是對於第二種情況並不是太多,因爲b最終只是一個空字符串。我試圖在.map之前和之後使用.reduce,但由於某些原因,它不會讓我在任何地方使用。

和想法如何實現我想要的?

回答

3

可以過濾可選檢查值不爲空字符串:

Optional<String> b = Optional.ofNullable(inputNode.get("b")) 
     .map(JsonNode::asText) 
     .filter(s -> !s.isEmpty()); 
+0

完善,這個工作完全像我想要的。謝謝! – Richard

+0

這正是我想要的感謝。 –