List集合中根据相同属性的对象合并计算
package com.thinkgem.jeesite.modules.test.web;
public class S {
private String name;
private String date;
private int value;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((date == null) ? 0 : date.hashCode ());
result = prime * result + ((name == null) ? 0 : name.hashCode ());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass () != obj.getClass ())
return false;
S other = (S) obj;
if (date == null) {
if (other.date != null)
return false;
} else if (!date.equals ( other.date ))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals ( other.name ))
return false;
return true;
}
static S merge(S s1, S s2) {
if (!s1.equals ( s2 )) {
throw new IllegalArgumentException ();
}
return new S ( s1.name, s1.date, s1.value + s2.value );
}
@Override
public String toString() {
return "S{" +
"name='" + name + '\'' +
", date='" + date + '\'' +
", value=" + value +
'}';
}
public S(String name) {
this.name = name;
}
public S(String name, String date, int value) {
this.name = name;
this.date = date;
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
上面是实体,需要重写equals入hashcode方法,定义merge方法
下面是测试类
package com.thinkgem.jeesite.modules.test.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) {
List<S> list = new ArrayList<S> ();
list.add(new S("小刘" , "2015/9/1", 2));
list.add(new S("小刘" , "2015/9/2", 3));
list.add(new S("小强" , "2015/9/1", 4));
list.add(new S("小强" , "2015/9/1", 5));
list.add(new S("小刘" , "2015/9/1", 6));
list.add(new S("小图" , "2015/9/1", 7));
list.add(new S("小刘" , "2015/9/1", 8));
list.add(new S("小图" , "2015/9/1", 9));
list.add(new S("小刘" , "2015/9/2", 99));
Map<S, S> map = new HashMap<S, S> ();
for (S s : list) {
if (map.containsKey(s)) {
map.put(s, S.merge(s, map.get(s)));
} else {
map.put(s, s);
}
}
System.out.println(map.values());
}
}
打印结果如下
[S{name='小图', date='2015/9/1', value=16},
S{name='小刘', date='2015/9/1', value=16},
S{name='小强', date='2015/9/1', value=9},
S{name='小刘', date='2015/9/2', value=102}]
然后就可以 了