我有一个凭证的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'。
提前感谢。
答案 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);