Java 使用hashmap从ArrayList检索并存储到新ArrayList

Java 使用hashmap从ArrayList检索并存储到新ArrayList,java,arraylist,hashmap,Java,Arraylist,Hashmap,我有一个凭证列表,如下所示 voucherlist数组列表 [0] voucher carrierCode "UPS" originShippingLocationCode "L998" systemVoucherID "000000000632" [1] voucher carrierCode "UPS" originShippingLocationCode "L998"

我有一个凭证列表,如下所示

voucherlist数组列表

    [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"  
我必须对具有相同原始ShippingLocationCode的凭证进行分组(创建一个新的ArrayList)

例如:将所有具有originShippingLocationCode=“L998”的凭证添加到一个新的ArrayList

我不知道originShippingLocationCode的值是多少,它将发生变化。我从一个API调用中得到这个数据作为响应

谁能帮我解决这个问题

我想在检测到originShippingLocationCode时使用Hashmap创建一个新的ArrayList,将originShippingLocationCode保留为“键”


提前感谢。

从我收集的信息来看,您想搜索您当前的阵列并取出所有具有特定配送位置的代金券吗

您可以使用以下类似的方法来实现

 for (Voucher v : vouchers) {
     if (v.getOriginShippingLocationCode().equals("L998")) {
         //.. add to new array list
     }
 }
这将遍历您的所有凭证,并将其装运位置代码与您指定的代码进行比较。如果它匹配,你可以用它做你喜欢的事

编辑

如果您不知道发货地点(我一定是从op中漏掉了这一部分),您可以使用地图并将发货地点作为密钥,这样您就可以获得与特定地点相关的所有凭证

Map<String, List<Voucher>> vouchers = new HashMap<>();
Map凭证=新建HashMap();

基于键构建新列表,然后
凭证。放置(键,新列表)

您完全可以使用
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 })));
    }
}
ArrayList凭证=新建ArrayList();
...
HashMap组=新的HashMap();
对于(凭证五:凭证){
if(groups.containsKey(v.getOriginShippingLocationCode())){
get(v.getOriginShippingLocationCode()).add(v);
}否则{
groups.put(v.getOriginShippingLocationCode(),新的ArrayList(Arrays.asList(新凭证[]{v}));
}
}

问题指出“我不知道OrigingShippingLocationCode的值会是多少,它会改变。”因此这不是很有用。更好的方法是OP已经建议的方法。“我正在考虑在检测到Origins HippingLocationCode时使用Hashmap创建一个新的ArrayList,将Origins HippingLocationCode保留为‘键’。”我的要求现在改变了。我必须根据Origins HippingLocationCode和carrierCode对凭证进行分组。你能帮我解决这个问题吗@Titus@vijay.k您可以将这些值连接到单个
字符串中
,并使用具有映射键的字符串。