方法一:
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}
备注:四种方法 任选其一