Java 使用hashmap从ArrayList检索并存储到新ArrayList
我有一个凭证列表,如下所示 voucherlist数组列表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"
[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您可以将这些值连接到单个字符串中
,并使用具有映射键的字符串。