如何实现如下效果:
有两个arraylist,分别为ary1和ary2,
ary1里有不定个对象,每个对象有两个属性,分别是id(这个是唯一的)和 长度(这个不是唯一的) 这个属性。
ary2里有不定个对象,每个对象有两个属性,分别是id(这个是唯一的)和 长度(这个不是唯一的) 这个属性。合并ary1和ary2为类型为ArrayList的对象ary3
如果id的值是相同的就把“长度”加起来,合并为一个对象发入ary3里
不相同的也放入ary3里
就是说,ary3里的id不能重复
有两个arraylist,分别为ary1和ary2,
ary1里有不定个对象,每个对象有两个属性,分别是id(这个是唯一的)和 长度(这个不是唯一的) 这个属性。
ary2里有不定个对象,每个对象有两个属性,分别是id(这个是唯一的)和 长度(这个不是唯一的) 这个属性。合并ary1和ary2为类型为ArrayList的对象ary3
如果id的值是相同的就把“长度”加起来,合并为一个对象发入ary3里
不相同的也放入ary3里
就是说,ary3里的id不能重复
把ary1中的对象读取取来,把id做为map的key,把长度做为map的值,
再把ary2中的对象做同样的操作
同时判断if(map.get(key)==null){
//增加
}else{
//值相加
}
然后返回对象到ary3中
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;public class MergeListTest{
public static List MergeList(List l1, List l2){
if(l1 == null || l2 == null){
return null;
}
Map total = new HashMap();
Iterator it1 = l1.iterator();
while(it1.hasNext()){
Demo temp = (Demo) it1.next();
total.put(temp.getId(), temp);
}
Iterator it2 = l2.iterator();
while(it2.hasNext()){
Demo temp = (Demo) it2.next();
if(total.containsKey(temp.getId())){
Demo temp1 = (Demo)total.get(temp.getId());
temp1.setLength(temp1.getLength() + temp.getLength());
}else{
total.put(temp.getId(), temp);
}
}
return new ArrayList(total.values());
}
public static void main(String[] args){
List l1 = new ArrayList();
List l2 = new ArrayList();
Demo d1 = new Demo("001", 1.1f);
Demo d2 = new Demo("002", 2.2f);
Demo d3 = new Demo("003", 3.3f);
Demo d4 = new Demo("004", 4.4f);
Demo d5 = new Demo("001", 1.5f);
l1.add(d1);
l1.add(d2);
l1.add(d3);
l2.add(d5);
l2.add(d4);
List total = MergeList(l1, l2);
System.out.println(total);
}
}class Demo{
private String id;
private float length;
public Demo(){
id = "";
length = 0f;
}
public Demo(String id, float length){
this.id = id;
this.length = length;
}
public void setId(String id){
this.id = id;
}
public void setLength(float length){
this.length = length;
}
public String getId(){
return this.id;
}
public float getLength(){
return this.length;
}
public String toString(){
return "(id:" + this.id + "|length:" + this.length + ")";
}
}