不知道有没有人来救救我?!---请各位好心的帮主都来看一看吧

时间:2022-07-25 14:10:37
前提:用户选择商品进行购买,购物篮呈现为:
商品  数量  价格  送货地点(shopid,选择框)...
购买信息按商品ID-销售单对象(键-值对)组成hashmap放在Session当中,

因为每个shopid对应1条销售总单记录,销售总单下又有细单保存购买的不同商品信息。
所以提交定单的时候需要将销售单对象重新按照送货地点(shopid)进行排序分组,
插入数据表中,并且对应每个送货地点(shopid)生成不同的单据。

问题是:
我用
HashMap map = (HashMap)session.getAttribute("buygoods"); //map的键-值对为:商品ID-销售单对象
java.util.Iterator iter = map.values().iterator();
      while(iter.hasNext()){
      ...
        将iter对象按其属性之一shopid重新排序分组,该怎么做?(构造新的按shopid排序的对象组?)
        }
      }

如果有简单的代码给我一些提示,将不胜感谢!

8 个解决方案

#1


Map集合本身无序,所以即使你按顺序加入元素都不能
保证Iterator 出来的还是原来顺序,更不用说对其进行排序了。

#2


那么如何实现按照商品浏览购物车内容,而在写入数据库时对应每个送货地点(shopid)生成不同的单据,有什么更好的办法吗?
现在购物车的信息是放在session里的呀

#3


代码是死的 人是活的!

应该先考虑我存什么东西 后面生成单的时候需要什么数据 这样一步一步反复推敲一下 再灵活运用你所熟悉的java数据结构来实现你的设想!

如果跟数据库有关的话 还要充分利用数据库的优点和好处!
相信到后面你就知道 该怎么做了!

#4


到后面就来不及了!
第2次做项目,第1次做设计,
本周就要写出设计,
请各位给我支个招吧

至于“我存什么东西 后面生成单的时候需要什么数据”
显示给用户并存入session的hashmap:
商品1 数量1 送货地点1
商品2 数量2 送货地点1
商品3 数量3 送货地点2...
而写入数据库的要求是,一次购买针对一个送货地点生成一张单据,一个单据里面包含若干商品,
即 送货地点1生成1张单据,包含商品1和商品2
   送货地点2生成1张单据,包含商品3...

我实在是想不出什么太好的办法了,你们有什么好办法就说出来吧!!!

#5


这个容易的,我的方法可能有点苯,但是解决问题了。

首先,[ 将iter对象按其属性之一shopid重新排序分组,该怎么做?(构造新的按shopid排序的对象组?)] 我认为可以用 TreeMap 来实现。

TreeMap tMap; // 用来放结果,keys 会自动排序的。

shop_id(1..n) -> vector { 商品1, 商品2 }

// 省略了得到 商品ID-销售单对象 的过程 
for (;;){
    type_shop_id t_shop_id = 销售单对象.shop_id;
    if ( tMap.containKeys(t_shop_id) ) {
        // shop_id 已经有了。
        Vector v=(Vector)tMap.get(t_shop_id);
        v.add(商品ID);
    }else {
        // shop_id 第一次出现。
        tMap.put(t_shop_id, (new Vector() v).add(商品ID) );
    }
}

以上仅仅是伪代码,TreeMap 可以好好利用,你可以参考一下java api.

#6


这个容易的,我的方法可能有点苯,但是解决问题了。

首先,[ 将iter对象按其属性之一shopid重新排序分组,该怎么做?(构造新的按shopid排序的对象组?)] 我认为可以用 TreeMap 来实现。

TreeMap tMap; // 用来放结果,keys 会自动排序的。

shop_id(1..n) -> vector { 商品1, 商品2 }

// 省略了得到 商品ID-销售单对象 的过程 
for (;;){
    type_shop_id t_shop_id = 销售单对象.shop_id;
    if ( tMap.containKeys(t_shop_id) ) {
        // shop_id 已经有了。
        Vector v=(Vector)tMap.get(t_shop_id);
        v.add(商品ID);
    }else {
        // shop_id 第一次出现。
        tMap.put(t_shop_id, (new Vector() v).add(商品ID) );
    }
}

以上仅仅是伪代码,TreeMap 可以好好利用,你可以参考一下java api.

#7


谢谢楼上的,我想了个不用排序的方法,
应该可以实现:)

#8


谢谢楼上的,我想了个不用排序的方法,
应该可以实现:)

#1


Map集合本身无序,所以即使你按顺序加入元素都不能
保证Iterator 出来的还是原来顺序,更不用说对其进行排序了。

#2


那么如何实现按照商品浏览购物车内容,而在写入数据库时对应每个送货地点(shopid)生成不同的单据,有什么更好的办法吗?
现在购物车的信息是放在session里的呀

#3


代码是死的 人是活的!

应该先考虑我存什么东西 后面生成单的时候需要什么数据 这样一步一步反复推敲一下 再灵活运用你所熟悉的java数据结构来实现你的设想!

如果跟数据库有关的话 还要充分利用数据库的优点和好处!
相信到后面你就知道 该怎么做了!

#4


到后面就来不及了!
第2次做项目,第1次做设计,
本周就要写出设计,
请各位给我支个招吧

至于“我存什么东西 后面生成单的时候需要什么数据”
显示给用户并存入session的hashmap:
商品1 数量1 送货地点1
商品2 数量2 送货地点1
商品3 数量3 送货地点2...
而写入数据库的要求是,一次购买针对一个送货地点生成一张单据,一个单据里面包含若干商品,
即 送货地点1生成1张单据,包含商品1和商品2
   送货地点2生成1张单据,包含商品3...

我实在是想不出什么太好的办法了,你们有什么好办法就说出来吧!!!

#5


这个容易的,我的方法可能有点苯,但是解决问题了。

首先,[ 将iter对象按其属性之一shopid重新排序分组,该怎么做?(构造新的按shopid排序的对象组?)] 我认为可以用 TreeMap 来实现。

TreeMap tMap; // 用来放结果,keys 会自动排序的。

shop_id(1..n) -> vector { 商品1, 商品2 }

// 省略了得到 商品ID-销售单对象 的过程 
for (;;){
    type_shop_id t_shop_id = 销售单对象.shop_id;
    if ( tMap.containKeys(t_shop_id) ) {
        // shop_id 已经有了。
        Vector v=(Vector)tMap.get(t_shop_id);
        v.add(商品ID);
    }else {
        // shop_id 第一次出现。
        tMap.put(t_shop_id, (new Vector() v).add(商品ID) );
    }
}

以上仅仅是伪代码,TreeMap 可以好好利用,你可以参考一下java api.

#6


这个容易的,我的方法可能有点苯,但是解决问题了。

首先,[ 将iter对象按其属性之一shopid重新排序分组,该怎么做?(构造新的按shopid排序的对象组?)] 我认为可以用 TreeMap 来实现。

TreeMap tMap; // 用来放结果,keys 会自动排序的。

shop_id(1..n) -> vector { 商品1, 商品2 }

// 省略了得到 商品ID-销售单对象 的过程 
for (;;){
    type_shop_id t_shop_id = 销售单对象.shop_id;
    if ( tMap.containKeys(t_shop_id) ) {
        // shop_id 已经有了。
        Vector v=(Vector)tMap.get(t_shop_id);
        v.add(商品ID);
    }else {
        // shop_id 第一次出现。
        tMap.put(t_shop_id, (new Vector() v).add(商品ID) );
    }
}

以上仅仅是伪代码,TreeMap 可以好好利用,你可以参考一下java api.

#7


谢谢楼上的,我想了个不用排序的方法,
应该可以实现:)

#8


谢谢楼上的,我想了个不用排序的方法,
应该可以实现:)