List<ApproveLineExp> approveLineFinal= this.getApproveExps(); //approveLineExps.size>10List保存一个ApproveLineExp的对象。
此对象设计很简单。
public class ApproveLineExp{
private Long id;

private Long approvelineId;                          // 
public BigDecimal quantity;                             //
private String flightNo;                                //
private Date flightDate;                                //
private String acreg;                                   
private String peoplenum;                               //
private String standpeoplenum;                        //
private BigDecimal standnum;       }如果list中保存的approveLineFinal.get(0) 得到的对象的属性flightNo、flightDate和approveLineFinal.get(1)属性flightNo、flightDate值相同。则把approveLineExp.get(1)的属性flightNo、flightDate设为空。依次类推。我的做法: //以下主要是为了让相同的(行)数据只显示一行
List<ApproveLineExp> newalef = new ArrayList<ApproveLineExp>();
newalef.add(approveLineFinal.get(0));
for (int i = 0;i<newalef.size();i++) {
ApproveLineExp approveLineExp =newalef.get(i);
for (int j = 1; j <approveLineFinal.size() ; j++) {
ApproveLineExp apexp = approveLineFinal.get(j);
if(approveLineExp.getFlightDate().equals(apexp.getFlightDate())
&&approveLineExp.getFlightNo().equals(apexp.getFlightNo())
){
apexp.setFlightDate(null);
apexp.setFlightNo(null);
}else{
newalef.add(apexp);
}
}
}

解决方案 »

  1.   

    重写ApproveLineExp的equals方法。根据flightNo、flightDate判断是否相等。
    可以直接用set进行存放。将重复的过滤。
      

  2.   

    楼主的要求貌似不是简单的过滤掉,你可以在ApproveLineExp里写个单独的对比方法,然后在向你的List中添加元素前先遍历一遍,如果已经有重复的了,就把你需要的字段设置为null,再添加进去。如果重写了equals方法和hashCode方法,用set的时候会有问题,当出现第一个重复元素,把flightDate和flightNo为null后添加进去,再出现第二个重复元素的时候,两个字段设为null,就再添加不进去了。因为已经有一个那俩字段都是null的了。所以还是自己写个对比方法比较好。