如果按照一个属性分组,请参照下面的文章:http://blog.csdn.net/liuxiao723846/article/details/46518553
如果按照多个属性对集合中的数据进行分组,需要把分组字段拼接起来联合比较,代码如下:
import java.util.ArrayList;
import java.util.List;
public class MergeList1 {
/**
* @param args
*/
public static void main(String[] args) {
List list = new ArrayList();
Bill b = new Bill();
b.setType("A");
b.setMoney(1);
b.setState("中");
list.add(b);
b = new Bill();
b.setType("B");
b.setState("大");
b.setMoney(2);
list.add(b);
b = new Bill();
b.setType("C");
b.setMoney(3);
b.setState("大");
list.add(b);
b = new Bill();
b.setType("A");
b.setMoney(2);
b.setState("大");
list.add(b);
b = new Bill();
b.setType("B");
b.setMoney(2);
b.setState("中");
list.add(b);
b = new Bill();
b.setType("C");
b.setMoney(3);
b.setState("大");
list.add(b);
b = new Bill();
b.setType("A");
b.setMoney(1);
b.setState("中");
list.add(b);
b = new Bill();
b.setType("B");
b.setState("中");
b.setMoney(2);
list.add(b);
b = new Bill();
b.setType("C");
b.setState("大");
b.setMoney(3);
list.add(b);
b = new Bill();
b.setType("C");
b.setState("大");
b.setMoney(1);
list.add(b);
List bi = new ArrayList();
for (Bill bill : list) {
boolean flag = false;
String a1 = bill.getType()+","+bill.getState();
for (Bill bills : bi) {
String a2 = bills.getType()+","+bills.getState();
if(a1.equals(a2)){
int money = bills.getMoney();
money += bill.getMoney();
bills.setMoney(money);
flag = true;
}
}
if(!flag){
bi.add(bill);
}
}
for (Bill bill : bi) {
System.out.println(bill.getType() +" " +bill.getState()+" "+bill.getMoney());
}
}
}
class Bill {
private String type;
private String state;
private Integer money;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Integer getMoney() {
return money;
}
public void setMoney(Integer money) {
this.money = money;
}
}运行结果:
A 中 2
B 大 2
C 大 10
A 大 2
B 中 4
参考博客:http://deeplyloving.iteye.com/blog/1844673