当前位置: 代码迷 >> J2SE >> 两个集合一起遍历的有关问题
  详细解决方案

两个集合一起遍历的有关问题

热度:37   发布时间:2016-04-24 00:24:43.0
两个集合一起遍历的问题

要求是:模拟超市收银系统的一些一般功能,J2SE实现,无界面

在做循环扫描商品,并显示购物清单功能的时候遇到了点问题。

我的思路是:
1.建立一个类,类中包含商品Id,和number
然后从控制台循环接收扫描的ID和number,每次接收都保存成一个类对象
客户端建立a集合(ArrayList),每次循环都把这个对象add进去
当扫描结束之后,建立b集合(HashMap),键值1是1(代表扫描商品功能)
键值2是a集合,然后把b集合传入服务端


服务端接收到1就调用扫描商品的功能,然后在扫描商品功能里我就犯2了
不知道该怎么遍历集合,服务端这里貌似有三个集合,一个是b集合,一个是a集合,
一个是系统商品库集合(ArrayList保存的).服务端要做的事情就是,服务端传来的
Id和商品库中ID相同时候,把库存数量修改成购买数量,并且如果Id重复,就把购买数量相加,
然后把最终结果返回客户端,客户端再遍历输出到控制台


我总感觉我思路不对,太烦琐了,集合遍历这块还不容易实现,大家有木有其他好的实现思路,求分享。。



------解决方案--------------------
你描述需求比较绕啊。。。看了一半我就放弃了。。。

遍历单个集合可以用 迭代器 iterator

去集合(Set)中找元素,直接就可以get了,并不需要遍历。
------解决方案--------------------
b是个map
如果要,循环b 中的 a ,那么:

Java code
List a = new ArrayList();        Map b = new HashMap();        b.put(1, 1);        b.put(2,b);                List list = (List)b.get(2);//取得集合a        for(Object o : list){//循环集合a                    }
------解决方案--------------------
就是循环嵌套

服务器端处理
Java code
List<xxx> serverList = ...; //假设系统商品库集合,xxx是商品类//接收处理//假设用Object序列化传输new ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());Map<Integer, Object> map = (Map<Integer, Object>)ois.readObject();List<xxx> clientList = (List<xxx>)map.get(2);Map<Integer, xxx> result = new HashMap<Integer, xxx>(); //返回给客户端for (xxx a : clientList) {    for (xxx b : serverList) {        if (a.getId() == b.getId()) {//客户端和系统商品库集合id相同            b.setAmount(b.getAmout() + a.getAmount()); //系统商品集合数量修改              //....其他修改        }    }    if (!result.containsKey(a.getId)) {        result.put(a.getId(), new xxx());    }    xxx b = result.get(a.getId());    b.setAmout(b.getAmout() + a.getAmout()); //返回给客户端的清单合计    //...其他合计}
------解决方案--------------------
就是个循环嵌套,有什么不能遍历的,赞成5楼!
  相关解决方案