List集合中的数据按照某一个属性进行分组

有的时候,我们需要在java中对集合中的数据进行分组运算。例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的type属性进行分组,计算money的总和。有以下两种思路:

思路一:

先计算集合中所有的type情况,然后对于每一种type去遍历集合计算money的和。伪代码如下:

Map<String,String> typeMap = new HashMap<String,String>();

fro (Bill bill : billList) {

typeMap.put(bill.getType,"");

}

fro(String t:typeMap.keySet) {

for (Bill bill : billList) {

if (bill.getType.equals(t)) {

//相应的业务处理

}

}

}

思路二:

[java] view plain copy
 
  1. public class test {    
  2.     public static void main(String[] args) {    
  3.         List<Bill> list = new ArrayList<Bill>();    
  4.         Bill b = new Bill();    
  5.         b.setType("A");    
  6.         b.setMoney(1);    
  7.         list.add(b);    
  8.         b = new Bill();    
  9.         b.setType("B");    
  10.         b.setMoney(2);    
  11.         list.add(b);    
  12.         b = new Bill();    
  13.         b.setType("C");    
  14.         b.setMoney(3);    
  15.         list.add(b);    
  16.         b = new Bill();    
  17.         b.setType("A");    
  18.         b.setMoney(1);    
  19.         list.add(b);    
  20.         b = new Bill();    
  21.         b.setType("B");    
  22.         b.setMoney(2);    
  23.         list.add(b);    
  24.         b = new Bill();    
  25.         b.setType("C");    
  26.         b.setMoney(3);    
  27.         list.add(b);    
  28.     
  29.     
  30.         List<Bill> bi = new ArrayList<Bill>();    
  31.         for (Bill bill : list) {    
  32.             boolean state = false;    
  33.             for (Bill bills : bi) {    
  34.                 if(bills.getType().equals(bill.getType())){    
  35.                     int money = bills.getMoney();    
  36.                     money += bill.getMoney();    
  37.                     bills.setMoney(money);    
  38.                     state = true;    
  39.                 }    
  40.             }    
  41.             if(!state){    
  42.                 bi.add(bill);    
  43.             }    
  44.         }    
  45.         for (Bill bill : bi) {    
  46.             System.out.println(bill.getType() +"    " +bill.getMoney());    
  47.         }    
  48.     }    
  49. }   


运行结果:

A    2
B    4
C    6

原文地址:https://www.cnblogs.com/mr-wuxiansheng/p/7911617.html