Java8 Map嵌套Map并求和

3

是否可能使用Java8在一行中编写以下内容,并进行所有空值和空字符串检查?

Map<Integer, Map<String, Object>> data = new HashMap<>(holdings.rowMap());

Set<Entry<Integer, Map<String, Object>>> entrySet = data.entrySet();
double transactedQuantity = 0;
for (Entry<Integer, Map<String, Object>> entry : entrySet) {
    Map<String, Object> value = entry.getValue();
    Object qty = value.get("quantity");
    if (qty != null && qty != "") {
        transactedQuantity += Double.valueOf(qty.toString());
    }
}

类似以下内容

data.values().stream().filter((k,v) -> k.equals("quantity") && v != null && v != "").flatMapToDouble(...);
2个回答

5
这个怎么样,
data.values().stream()
    .map(m -> m.get("quantity"))
    .filter(qty -> qty != null && qty != "")
    .mapToDouble(qty -> Double.valueOf(qty.toString()))
    .sum();

4
可以进一步简化,用data.values() .stream() .map(valueMap -> valueMap.get("quantity"))替换data.entrySet().stream() .map(e -> e.getValue().get("quantity")) - Naman
在底层对象可能是任何类型的情况下,对一个对象执行空白(即“”)检查是否可以? - Anshul Singhal

4
以下代码可能是解决方案:
double transactedQuantity  = data.values()
                .stream()
                .map(valueMap -> valueMap.get("quantity"))
                .filter(exactQuantity -> exactQuantity != null)
                .map(quantityInString -> quantityInString.toString())
                .filter(quantity -> !quantity.isEmpty())
                .mapToDouble(quantityInString -> Double.valueOf(quantityInString))
                .sum();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接