按条件合并List集合中实体数据
由于公司业务需求,在List集合中把对应相同条件的数据进行合并,于是就有了这篇博客;
- 说一下我的思路吧:将获取的集合通过循环比对,并设定一个删除标识的属性或者变量,通过类似冒泡一下的比对,将修改前的数据增加删除标识,然后通过删除标识为1的数据达到效果!
创建一个实体类
下面的set,get,toString方法和带参构造就不放了
public class Demo {
private String objectno;//单号
private String produceline;//产线
private String diameter;//直径
private BigDecimal quantity;//数量
private BigDecimal factweight;//重量
private int status;//删除标识
}
主体代码
private static List<Demo> guangzhou(List<Demo> lyd) {
//首先定义一个需要返回的list
List<Demo> list = new ArrayList<>();
//开始循环,并将数据一致的数量重量进行增加,并将增加后的标识为删除
for(int i =0 ;i<lyd.size(); i++){
for(int a=i+1;a<lyd.size();a++){
//判断产线直径是否一致
if(lyd.get(i).getProduceline().equals(lyd.get(a).getProduceline())){
if(lyd.get(i).getDiameter().equals(lyd.get(a).getDiameter())){
if(lyd.get(i).getStatus() != 1){//当设定删除标识后不再根据删除数据进行测算
//将计算数据设置为比对的数据,并对前者添加删除标识
lyd.get(a).setQuantity(lyd.get(i).getQuantity().add(lyd.get(a).getQuantity()));
lyd.get(a).setFactweight(lyd.get(i).getFactweight().add(lyd.get(a).getFactweight()));
lyd.get(i).setStatus(1);
}
}
}
}
}
//循环删除
for (int i = 0; i <lyd.size() ; i++) {
if(lyd.get(i).getStatus() == 1){
lyd.remove(i);
i--;
}
}
return lyd;
}
public static void main(String[] args) {
List<Demo> list = new ArrayList<>();
list.add(new Demo("1","lwg","12",new BigDecimal(12.00),new BigDecimal(12.00),0));
list.add(new Demo("2","pl","9",new BigDecimal(12.00),new BigDecimal(12.00),0));
list.add(new Demo("3","lwg","12",new BigDecimal(12.00),new BigDecimal(12.00),0));
list.add(new Demo("4","pl","10",new BigDecimal(12.00),new BigDecimal(12.00),0));
list.add(new Demo("5","lwg","12",new BigDecimal(12.00),new BigDecimal(12.00),0));
list.add(new Demo("6","lwg","11",new BigDecimal(12.00),new BigDecimal(12.00),0));
list.add(new Demo("7","lwg","12",new BigDecimal(2.00),new BigDecimal(12.00),0));
for (Demo d:list){
System.out.println(d.toString());
}
List<Demo> demo = guangzhou(list);
System.out.println("\n");
for(Demo a:demo){
System.out.println(a.toString());
}
}
结果