java集合list中的資料按照多個屬性分組
阿新 • • 發佈:2019-02-04
如果按照一個屬性分組,請參照下面的文章: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