java集合list中的数据按照多个属性分组

如果按照一个属性分组,请参照下面的文章: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<Bill> list = new ArrayList<Bill>();  
        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<Bill> bi = new ArrayList<Bill>();  
        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

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值