请教账单领域的实体,值对象与服务的设计问题.

请教账单领域的实体,值对象与服务的设计问题.
将一堆账单按照类型(自来水,电力,燃气,电信)的不同分别挑拣出来,然后按照类型放在不同的篮子里面,对于这种业务场景.
我写了一段代码,但感觉明显是过程思维,而且里面有很多if...else...,请教我如何将其使用模式重构为OO代码?如何彻底消除if...else...
账单的类为:
public class Bill {
private String barCode;//账单条码
private float billAmount;//账单 金额
private float commission;//手续费
private float totalAmount;//总金额
private int type;// 账单类型,比如(自来水,电力,燃气,电信)
private int commitStatus;//提交状态
private int payStatus;//是否成功缴费
private Date commitDate;//账单提交时间
private MemberCard card; //支付账单所使用的会员卡
private BsOnlineTradeRecord record;//支付所产生的交易记录
private Date billDate;//账单日期
private Date payDate;//支付日期
private int finalStatus;//账单最终出来状态

/***
set() and get()方法省略
***/

}//end of class

账单服务类中的一个分拣不同账单的方法:
private Map<String, List<Bill>> sortBills(List<Bill> bill){
List<Bill> waterBills = new ArrayList<Bill>();
List<Bill> electricBills = new ArrayList<Bill>();
List<Bill> gasBills = new ArrayList<Bill>();
List<Bill> telecomBills =new ArrayList<Bill>();

for(Bill b:bill){
int bType = b.getType();

if(bType==10){//账单类型码是10为电力账单
electricBills.add(b);
continue;
}else if(bType==5||bType==6||bType==7||bType==8||bType==9||bType==19||bType==20){
//账单类型码是5,6,7,8,9,19,20中一个就为自来水账单
waterBills.add(b);
continue;
}else if(bType==1||bType==2||bType==3){
//账单类型码是1,2,3中一个就为燃气账单
gasBills.add(b);
continue;
}else if (bType==12){//账单类型码是12为电信账单
telecomBills.add(b);
continue;
}//end of if...else...
}//end of for...

Map<String, List<Bill>> resultMap = new HashMap<String, List<Bill>>();
resultMap.put("water", waterBills);
resultMap.put("electric", electricBills);
resultMap.put("gas", gasBills);
resultMap.put("telecom", telecomBills);

return resultMap;
}//end of method

请各位大哥多多指教?感觉是Model Bill中的内容有点臃肿了. 一些属性MemberCard card 是可以拉出来做值对象的.而账单中似乎也不应该将交易记录 BsOnlineTradeRecord record;作为账单的属性.请多指教!

Bill这个实体是华而不实,肯定要分解的,分解成一个聚合体。
再配合Specification来替代一些if else约束。