【发布时间】:2016-11-10 19:16:03
【问题描述】:
我遇到了一个问题,即一个键/值对正在正确更新,但具有相同键的其他值没有得到更新。我正在使用一个 HashMap,它由一个字符串列表(项目 Nbr)作为键和存储为字符串列表(PO Nbr)的值组成,因此在这方面它本质上是一对多的。下面是我实现这个 HashMap 的代码,但我只是卡住了。任何帮助将不胜感激。
public void process(List<PoBean> excelData,List<String> errors) throws CustomException
{
Map<String,ArrayList<String>> poNbrItemNbrMap = new HashMap<String, ArrayList<String>>();
ArrayList<String> poNbrList = new ArrayList<String>();
int recordCount = excelData.size();
for(PoBean bean : excelData)
{
if(rowValidator.validate(bean, errors))
{
if (!newErrorInRow(errors))
{
poNbrList.add(bean.getPoId());
poNbrItemNbrMap.put(bean.getItemNbr(),bean.getPoId());
}
}
}
List<DutyFees> dutyFeesTempDAO = myService.getAssocIdByPOAndItemNbr(new ArrayList<String>(poNbrItemNbrMap.keySet()),new ArrayList<String>(poNbrItemNbrMap.values()));
for(DutyFees duty : dutyFeesTempDAO)
{
Double dutyFees = new Double(0);
if(poNbrItemNbrMap.containsKey(duty.getItemNbr()) && poNbrItemNbrMap.containsValue(duty.getPoId()))
{
for(PoBean dutyBean : excelData)
{
if(duty.getPoId().equals(dutyBean.getPoId()) && duty.getItemNbr().equals(dutyBean.getItemNbr()))
{
dutyFees = new Double(dutyBean.getDutyFees());
break;
}
}
Boolean result = myService.updateDutyFeesByAssocID(duty.getAssocId(), dutyFees);
}
}
}
【问题讨论】:
-
"具有相同键的其他值没有得到更新" --
HashMap中不能有具有相同键的其他值。 -
如果你有一对多的关系,你需要一个
Map<String, List<String>>。 -
或来自某个第 3 方库的
MultiMap。