OrderModel(int customerid, int bookid)
QueryModel(int customerid, int[] bookid)(注意两个model之间的差别)ArrayList orderArray =new ArrayList();
orderArray.add(orderModel1);
orderArray.add(orderModel2);
.
.
.
orderArray.add(orderModelN);orderArray 是包含了多个OrderModel的ArrayList,并且OrderModel之间customerid有可能有相等;
现在想得到一个新的ArrayList,把customerid相等的OrderModel要合并成一个QueryModel,然后添加到这个新的ArrayList里,有没有什么好办法?
请各位大大赐教!
QueryModel(int customerid, int[] bookid)(注意两个model之间的差别)ArrayList orderArray =new ArrayList();
orderArray.add(orderModel1);
orderArray.add(orderModel2);
.
.
.
orderArray.add(orderModelN);orderArray 是包含了多个OrderModel的ArrayList,并且OrderModel之间customerid有可能有相等;
现在想得到一个新的ArrayList,把customerid相等的OrderModel要合并成一个QueryModel,然后添加到这个新的ArrayList里,有没有什么好办法?
请各位大大赐教!
把所有数据转到Set中,然后再使用List.addAll(Collection)方法转到另一个List
你看看org.apache.commons.collections.map.MultiValueMap,可以解决你的问题。
ArrayList keyArray = new ArrayList();
for(int i = 0 ; i < allRuleArray.size(); i++)
{
RuleModel ruleModel = (RuleModel)allRuleArray.get(i);
if(!keyArray.contains(ruleModel.getKey()))
keyArray.add(ruleModel.getKey());
}
HashMap destMap = new HashMap();
for(int j = 0 ; j < keyArray.size(); j++)
{
String key = (String)keyArray.get(j);
ArrayList ruleColumnArray = new ArrayList();
for(int k = 0 ; k < allRuleArray.size(); k++)
{
RuleModel ruleModel = (RuleModel)allRuleArray.get(k);
if(key == ruleModel.getKey())
{
ruleColumnArray.add(ruleModel);
}
}
destMap.put(key, ruleColumnArray);
}自己写了点儿代码,先不考虑效率,折腾出来了
if(!keyArray.contains(ruleModel.getKey()))
keyArray.add(ruleModel.getKey());
}改成
if(!keyArray.contains(ruleModel))
keyArray.add(ruleModel);
}
就可以了啊,当然你要重载一下RuleModel的equals方法,在那里判断下key是否相等
使用api中实现的高效代码对程序的好处远远大于坏处
只要customerid相等,就判断两个OrderModel相等。
然后用orderArray的retainAll(orderArray2)方法。 得到的就是你想要的。