从ArrayList检索并使用hashmap存储到新的Arraylist中

时间:2016-01-18 15:27:02

标签: java arraylist hashmap

我有一个凭证的ArrayList如下。

voucherlist ArrayList

    [0] voucher  
        carrierCode "UPS"
        originShippingLocationCode  "L998"  
        systemVoucherID "000000000632" 
    [1] voucher  
        carrierCode "UPS"
        originShippingLocationCode  "L998"  
        systemVoucherID "000000000633"  
    [2] voucher  
        carrierCode "UPS"
        originShippingLocationCode  "L998"  
        systemVoucherID "000000000634"  
    [3] voucher  (id=2744)
        carrierCode "FEDEX" 
        originShippingLocationCode  "L998"  
        systemVoucherID "000000000638"  
    [4] voucher     
        carrierCode "FEDEX"
        originShippingLocationCode  "L998"  
        systemVoucherID "000000000639"  
    [5] voucher     
        carrierCode "UPS"
        originShippingLocationCode  "L1003"     
        systemVoucherID "000000000636"  
    [6] voucher     
        carrierCode "UPS"
        originShippingLocationCode  "L1003"     
        systemVoucherID "000000000637"  
    [7] voucher  
        carrierCode "UPS"   
        originShippingLocationCode  "L1001"     
        systemVoucherID "000000000635"  

我必须将具有相同originShippingLocationCode的凭证分组(创建一个新的ArrayList)。

Ex:将originShippingLocationCode =“L998”的所有凭证发送到一个新的ArrayList。

我不知道它将改变的originShippingLocationCode的值是多少。我将这些数据作为API调用的响应。

任何人都可以帮忙解决这个问题吗?

我想在检测到originShippingLocationCode时使用Hashmap创建一个新的ArrayList,将originShippingLocationCode保持为'Key'。

提前感谢。

2 个答案:

答案 0 :(得分:2)

你绝对可以使用HashMap,这是一个例子:

ArrayList<Voucher> vouchers = new ArrayList<Voucher>();
...
HashMap<String, ArrayList<Voucher>> groups = new HashMap<String, ArrayList<Voucher>>();
for (Voucher v : vouchers) {
    if (groups.containsKey(v.getOriginShippingLocationCode())) {
        groups.get(v.getOriginShippingLocationCode()).add(v);
    } else {
        groups.put(v.getOriginShippingLocationCode(), new ArrayList<Voucher>(Arrays.asList(new Voucher[] { v })));
    }
}

答案 1 :(得分:0)

因此,根据我的搜索结果,您希望搜索当前阵列并提取所有具有特定送货地点的优惠券?

您可以使用类似于以下内容的方式执行此操作

 for (Voucher v : vouchers) {
     if (v.getOriginShippingLocationCode().equals("L998")) {
         //.. add to new array list
     }
 }

这将循环显示您的所有优惠券,并将其送货地点代码与您指定的代码进行比较。如果匹配,你可以用它做你喜欢的事。

修改

如果您不知道送货地点(我必须从您的操作中错过了该部分),您可以使用地图并将您的送货地点作为关键,这样您就可以获得与特定相关的所有优惠券位置。

Map<String, List<Voucher>> vouchers = new HashMap<>();

根据密钥构建新列表,然后vouchers.put(key, newList);