list对象去重复名称,并且合并数量

方法一:

package sada;

public class Order {

    private String name;
    private int num;
    public Order(String name, int num) {
        super();
        this.name = name;
        this.num = num;
    }
    public Order() {
        
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    } 
}
 

 

package sada;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

public class Test {
    //张三==6 天齐==1 王五==3 赵六==1
    public static void main(String[] args) {
        List<Order>list=new Test().getOrderList();
        //重复存在
        List<Order>aList=new ArrayList<Order>();
        System.out.println("获取list并且添加到新的list==========");
        for (int i = 0; i < list.size(); i++) {
            //System.out.println(list.get(i).getName()+"=="+list.get(i).getNum());
            int num=list.get(i).getNum();
            for (int j = 0; j < list.size(); j++) {
                if(i==j) {
                    continue;
                }else {
                    if(list.get(i).getName().equals(list.get(j).getName())) {
                        num+=list.get(j).getNum();
                        System.out.println("--"+list.get(j).getName()+"=="+list.get(j).getNum()+"==相加后"+num);
                    }
                }
            }
            Order or=new Order();
            or.setName(list.get(i).getName());
            or.setNum(num);
            aList.add(or);
        }
        System.out.println("获取新的list数据==========");
        for (int i = 0; i < aList.size(); i++) {
            System.out.println(aList.get(i).getName()+"=="+aList.get(i).getNum());
        }
        System.out.println("set去重复后========================");
        Set<Order>set=new TreeSet<>(Comparator.comparing(Order::getName));
        set.addAll(aList);
        //单一存在
        List<Order>bList=new ArrayList<>(set);
        for (Order or:bList) {
            System.out.println(or.getName()+"=="+or.getNum());
        }    
    }
    
    
    public List<Order>getOrderList(){
        List<Order>list=new ArrayList<Order>();
        Order order=new Order();
        order.setName("张三");
        order.setNum(1);
        Order order2=new Order();
        order2.setName("王五");
        order2.setNum(1);
        Order order3=new Order();
        order3.setName("张三");
        order3.setNum(2);
        Order order4=new Order();
        order4.setName("王五");
        order4.setNum(2);
        Order order5=new Order();
        order5.setName("赵六");
        order5.setNum(1);
        Order order6=new Order();
        order6.setName("张三");
        order6.setNum(3);
        Order order7=new Order();
        order7.setName("天齐");
        order7.setNum(1);
        list.add(order);
        
        list.add(order2);
        list.add(order3);
        list.add(order4);
        list.add(order5);
        list.add(order6);
        list.add(order7);
        return list;
    }
}

方法二,推荐使用此方法:来自qq好友 蓝蜻蜓

package com.dmg.member.output.dto;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;


public class MainTest
{

    public static void main(String[] args)
    {
        List<Product> list = new ArrayList<Product>();
        list.add(new Product("一次性使用中单", 1));
        list.add(new Product("PTCA导管", 1));
        list.add(new Product("一次性使用无菌注射针", 3));
        list.add(new Product("导引导丝", 1));
        list.add(new Product("一次性使用中单", 2));
        list.add(new Product("导引导丝", 2));
        list.add(new Product("PTCA导管", 2));
        list.add(new Product("一次性使用中单", 3));
        list.add(new Product("PTCA导管", 3));
        Map<String, Product> productMap = new HashMap<String, Product>();
        for (Product product : list)
        {
            if (productMap.containsKey(product.getProductname()))
            {
                product.setCounts(product.getCounts() + productMap.get(product.getProductname()).getCounts());
            }
            productMap.put(product.getProductname(), product);
        }
        list.clear();// 清空栈内存
        for (Entry<String, Product> entry : productMap.entrySet())
        {
            list.add(entry.getValue());
        }
        for (Product product : list)
        {
            System.out.println(product.toString());
        }
    }
}

class Product
{
    private String productname;// 产品名称

    private Integer counts;// 数量

    public Product(String productname, Integer counts)
    {
        super();
        this.productname = productname;
        this.counts = counts;
    }

    public String getProductname()
    {
        return productname;
    }

    public void setProductname(String productname)
    {
        this.productname = productname;
    }

    public Integer getCounts()
    {
        return counts;
    }

    public void setCounts(Integer counts)
    {
        this.counts = counts;
    }

    @Override
    public String toString()
    {
        return "产品信息 [产品名称=【" + productname + "】, 数量=【" + counts + "】]";
    }
}

 

运行结果

产品信息 [产品名称=【一次性使用中单】, 数量=【6】]
产品信息 [产品名称=【PTCA导管】, 数量=【6】]
产品信息 [产品名称=【一次性使用无菌注射针】, 数量=【3】]
产品信息 [产品名称=【导引导丝】, 数量=【3】]

 

方法三:

package com.dmg.member.output.dto;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;


public class NewTest {
    
    public static void main(String[] args) {
        List<Map<String,Object>>list=new NewTest().getList();
        Map<String,Object> map=new HashMap<String,Object>();
        for (Map<String, Object> mp : list) {
            int num=0;
            if(map.containsKey(mp.get("name").toString())) {
                //存在 添加数量
                Map<String,Object> mm=(Map<String, Object>) map.get(mp.get("name").toString());
                num=Integer.parseInt(mp.get("num").toString())+Integer.parseInt(mm.get("num").toString());
                mp.put("num", num);
            }
            map.put(mp.get("name").toString(), mp);
       } 
       list.clear(); 
       //添加到list    
       for (Entry<String,Object> mp : map.entrySet()) {
            Map mm=(Map) mp.getValue();
            Map<String,Object>newMap=new HashMap<String,Object>();
            newMap.put("name", mm.get("name"));
            newMap.put("num", mm.get("num"));
            list.add(newMap);
       }
       for (Map<String, Object> mm : list) {
            System.out.println(mm.get("name")+"=="+mm.get("num"));
       }
    }
    //张三 8 李四5  赵璐1  王五1
    public List<Map<String,Object>>getList(){
        List<Map<String,Object>>list=new ArrayList<Map<String,Object>>();
        Map<String,Object>map1=new HashMap<String,Object>();
        map1.put("name", "李四");
        map1.put("num","2");
        Map<String,Object>map2=new HashMap<String,Object>();
        map2.put("name", "张三");
        map2.put("num","3");
        Map<String,Object>map3=new HashMap<String,Object>();
        map3.put("name", "王五");
        map3.put("num","1");
        Map<String,Object>map4=new HashMap<String,Object>();
        map4.put("name", "张三");
        map4.put("num","2");
        Map<String,Object>map5=new HashMap<String,Object>();
        map5.put("name", "李四");
        map5.put("num","3");
        Map<String,Object>map6=new HashMap<String,Object>();
        map6.put("name", "赵璐");
        map6.put("num","1");
        Map<String,Object>map7=new HashMap<String,Object>();
        map7.put("name", "张三");
        map7.put("num","3");
        list.add(map1);
        list.add(map2);
        list.add(map3);
        list.add(map4);
        list.add(map5);
        list.add(map6);
        list.add(map7);
        return list;
    }
}
 

运行结果:

李四==5
张三==8
王五==1
赵璐==1
 

方法四:强烈推荐这种方法

package com.dmg.member.output.dto;


import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.Callable;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import javax.security.auth.x500.X500Principal;
import javax.sound.midi.SysexMessage;

public class NewTest {

    /**
     * 强烈推荐这种方法
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        List<Order>list=new NewTest().getOrderList();
        //根据类型分组 然后求出每个类型的  数量的总和 转换成一个map
        Map<String, Double> booksSum = list.stream().collect(Collectors.groupingBy(Order::getName, Collectors.summingDouble(Order::getNum)));
        System.out.println(booksSum);
    }
    
    
    
    public List<Order>getOrderList(){
        List<Order>list=new ArrayList<Order>();
        Order order=new Order();
        order.setName("张三");
        order.setNum(1);
        Order order2=new Order();
        order2.setName("王五");
        order2.setNum(1);
        Order order3=new Order();
        order3.setName("张三");
        order3.setNum(2);
        Order order4=new Order();
        order4.setName("王五");
        order4.setNum(2);
        Order order5=new Order();
        order5.setName("赵六");
        order5.setNum(1);
        Order order8=new Order();
        order8.setName("天齐");
        order8.setNum(2);
        Order order6=new Order();
        order6.setName("张三");
        order6.setNum(3);
        Order order7=new Order();
        order7.setName("天齐");
        order7.setNum(1);
        list.add(order);
        list.add(order8);
        list.add(order2);
        list.add(order3);
        list.add(order4);
        list.add(order5);
        list.add(order6);
        list.add(order7);
        return list;
    }

}

class Order{
    private String name;
    
    private int num;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
    
}
 

输出结果:

{张三=6.0, 王五=3.0, 赵六=1.0, 天齐=3.0}

 

备注:四种方法 任选其一

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值