2016-03-11 67 views
1

我正在購物項目上工作。目前我有一個包含購物車和數量的Shoppingcart的地圖。我必須迭代OrderlineDtolist 並將它們添加到ShoppingcartMap。我已經嘗試過並取得了成績,但我不確定這是否是最好的。如果還有其他方法,請告訴我。如何在java8中迭代時有效檢查其他條件?

下面是我的代碼片段。請讓我知道是否有更好的解決辦法。

orderLineDTOList.stream().forEach((orderLineDTO) -> { 
     if (orderLineDTO != null && orderLineDTO.getTempQuantity() != null && orderLineDTO.getTempQuantity() > 0) { 
      if (shoppingCartItemMap.containsKey(orderLineDTO.getProduct().getProductCode())) { 
       shoppingCartItem = shoppingCartItemMap.get(orderLineDTO.getProduct().getProductCode()); 
       shoppingCartItem.setQuantity(orderLineDTO.getTempQuantity()); 
      } else { 
       shoppingCartItem = new ShoppingCartItem(orderLineDTO.getProduct(), orderLineDTO.getTempQuantity()); 
      } 
      getSession().getShoppingCartItemMap().put(orderLineDTO.getProduct().getProductCode(), shoppingCartItem); 
     } 
    }); 

回答

2

Java-8不提供任何新的特定構造來代替if語句。但是在這裏,你可以利用新的方法,如Stream.filterMap.computeIfAbsent增加可讀性:

orderLineDTOList.stream() 
    .filter(orderLineDTO -> orderLineDTO != null && 
      orderLineDTO.getTempQuantity() != null && orderLineDTO.getTempQuantity() > 0) 
    .forEach((orderLineDTO) -> 
     shoppingCartItemMap.computeIfAbsent(orderLineDTO.getProduct().getProductCode(), 
      code -> new ShoppingCartItem(orderLineDTO.getProduct(), 0) 
     ).setQuantity(orderLineDTO.getTempQuantity())); 

我認爲getSession().getShoppingCartItemMap()相同shoppingCartItemMap

+0

感謝您的回答 – anonymous