日期:2014-05-20  浏览次数:20721 次

两个集合一起遍历的问题

要求是:模拟超市收银系统的一些一般功能,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楼!