在哈希图中为列表对象添加值

时间:2019-07-14 02:37:47

标签: java

我正在尝试将列表对象添加到哈希图

我尝试使用以下代码无效

> as.Date(ISOdate("2017","12", "05", "01"))
[1] "2017-12-05"

在else块部分发现以下错误。

public static Map<Long, List<Long>>  getCellAttributes(List<TargetedOffersCampaignVO> targetedOffersCampaignVOList){

    LOG.info("targetedOffersCampaignVO: {}", Arrays.toString(targetedOffersCampaignVOList.toArray()));

    Map<Long, List<Long>> cellAtributesMap = new HashMap();

    List<Long> cellList = new ArrayList<>();

    for(TargetedOffersCampaignVO targetedOffersCampaignVO: targetedOffersCampaignVOList){
        Long campaignId = targetedOffersCampaignVO.getCampaignID();
        Long cellUserNumber = targetedOffersCampaignVO.getCellUserNumber();
        if(cellAtributesMap.containsKey(campaignId)){
            cellList.add(cellUserNumber);
            cellAtributesMap.put(campaignId, cellList);
        }
        else {
            Map.put(campaignId, cellAtributesMap.get(campaignId).add(cellUserNumber));
        }
    }
    return cellAtributesMap;
}

3 个答案:

答案 0 :(得分:1)

好的,首先,else块中的shoot(n)是什么?在我看来,这在逻辑上听起来是错误的,可能您是指Map.put尚未在地图中的情况。 在这种情况下,您可以:

campaignId

现在,else { List<Long> cellList = new ArrayList<>(); cellList.add(cellUserNumber); cellAtributesMap.put(campaignId, cellList); } 块在逻辑上也看起来不正确,不需要维护全局列表(如果if没有排序的话),也不需要每次targetedOffersCampaignVOList时间进入地图。

由于对我来说这似乎不是一项作业,因此这里有一个更好的版本:

put

答案 1 :(得分:0)

  

我认为您在else块中遇到问题:

else {
         Map.put(campaignId, cellAtributesMap.get(campaignId).add(cellUserNumber));
     }

Map在这里的呼叫是不合适的。如果我的猜测是正确的,那么如果以前不存在特定的array,那么您想初始化一个新的campaignId,在这种情况下,您想执行此else块。然后,您只需像这样更改else块:

else
{
  List<Long> newList= new ArrayList<>();
  newList.add(cellUserNumber);
  cellAtributesMap.put("campaignId", newList);
}

答案 2 :(得分:-1)

cellAtributesMap.get(campaignId).add(cellUserNumber)

上面的方法调用返回一个布尔值。 您的else块应如下所示

List<Long> list=new ArrayList<>();//any list implementation
list.add(cellUserNumber);
cellAtributesMap.put(campaignId,list);