java Map 中如果键相同就让值相加是该怎么实现

sweetyane 2013-02-27 03:59:17
已经得到值,现在需要判断:
Q290010101 1
Q290060101 1
Q290060501 1
Q290010101 2
将Q290010101的值相加,也就是
Q290010101 3
Q290060101 1
Q290060501 1
应该怎么做? 写的代码如下:
public void setHBDetail(String[] masterid) {
List<String> list = new ArrayList<String>();
for (String item : masterid) {
if (!list.contains(item)) {
list.add(item);
}
}
String[] ary = list.toArray(new String[0]);
String a = "_";
for (String value : ary) {
// 得到去重复后的单号
List<InboundDetail> list2 = this.inboundService.getMasterid(value);
for (InboundDetail inboundDetail : list2) {
// 根据单号及SKU查询
List<InboundDetail> list3 = this.inboundService.getMasteridandSku(value, inboundDetail.getSkuNo());
for (InboundDetail inboundDetail2 : list3) {
Integer b=(int)inboundDetail2.getExppcsqty();
Object[][] vos={{inboundDetail2.getSkuNo(),b}};
HashMap<String, Integer> mapResult=new HashMap<String, Integer>();
for (int i = 0; i < vos.length; i++) {
Object[] vo=vos[i];
Integer num=mapResult.get(vo[0]);
if(num==null){
num=0;
}
mapResult.put((String) vo[0], num+(Integer)vo[1]);
} System.out.println(mapResult);
}
}
}
}
但是得到的还是
Q290010101 1
Q290060101 1
Q290060501 1
Q290010101 2
因为每次循环只取到一个值,这样比的话永远都不会重复,想知道该怎么改这个才可以实现
Q290010101 3
Q290060101 1
Q290060501 1
...全文
4425 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
student_2008 2013-03-01
  • 打赏
  • 举报
回复
用2个map就行了
微风飘过 2013-03-01
  • 打赏
  • 举报
回复
你这个和购物车结账的原来差不多
微风飘过 2013-03-01
  • 打赏
  • 举报
回复
不固定还是可以的啊,map的大小你可以获取晒,大的大小就是循环的次数
sweetyane 2013-02-27
  • 打赏
  • 举报
回复
引用 1 楼 h932075062 的回复:
使用双重for循环来做嘛,先从map里面去一个键的值,然后再把改建和map里面的所有键比较,如果有就相加,没有就输出
这个值不能固定
sweetyane 2013-02-27
  • 打赏
  • 举报
回复
引用 3 楼 luoyane 的回复:
引用 2 楼 rumlee 的回复:先判断一下是否已经存在了,如果存在了就在原来的基础上加上现在的值,如果不存在,就往map里面写入了。你写的代码没看懂,本来很简单的东西,怎么搞那么复杂啊。 Map<String,Integer> map = new HashMap<String,Integer>(); public void add(String key,I……
String str2 = masterStr;//得到合并单据的多个单号 String[] str = str2.split("_");//以“_”分割 setHBDetail(str);将单号放入setHBDetail方法中 我要做的就是,将这多个单号下的SKU进行比较,如果SKU相同,值相加 单据不止两个,有多个
sweetyane 2013-02-27
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
先判断一下是否已经存在了,如果存在了就在原来的基础上加上现在的值,如果不存在,就往map里面写入了。你写的代码没看懂,本来很简单的东西,怎么搞那么复杂啊。 Map<String,Integer> map = new HashMap<String,Integer>(); public void add(String key,Integer value){ ……
String str2 = masterStr; String[] str = str2.split("_"); setHBDetail(str);
rumlee 2013-02-27
  • 打赏
  • 举报
回复
先判断一下是否已经存在了,如果存在了就在原来的基础上加上现在的值,如果不存在,就往map里面写入了。你写的代码没看懂,本来很简单的东西,怎么搞那么复杂啊。 Map<String,Integer> map = new HashMap<String,Integer>(); public void add(String key,Integer value){ if(map.get(key)!=null){ map.put(key,map.get(key)+value); }else{ map.put(key,value); } } 大概算法是这样,具体语法对不对,你自己测试下吧。
微风飘过 2013-02-27
  • 打赏
  • 举报
回复
使用双重for循环来做嘛,先从map里面去一个键的值,然后再把改建和map里面的所有键比较,如果有就相加,没有就输出

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧