1. 程式人生 > >java集合list中的資料按照多個屬性分組

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