集合的一个综合小例题

客户的消费记录如下: 姓名 消费金额 李四 8359 李四 1048 王五 3827 李四 2158 李四 553 王五 837 王五 2870 张三 9936

设计程序,找出消费次数最多的客户,并获取到其最高的消费金额

个人思路:先建立一个list来存放数据,因为list可以存储重复数据,然后再将use中的name提取到map里面,键值为名字,内容为个数,这样就可以统计消费的个数了,然后再用if语句来筛选出最大消费者,再用最大消费者的名字返回到List里面提取最大的金额

package com.ujiuye.HomeWork;

public class use {
          
   
	// 定义一个客户类,存在姓名和金额属性
	private String name;
	private double money;
	public use() {
          
   
		super();
		// TODO Auto-generated constructor stub
	}
	public use(String name, double money) {
          
   
		super();
		this.name = name;
		this.money = money;
	}
	public String getName() {
          
   
		return name;
	}
	public void setName(String name) {
          
   
		this.name = name;
	}
	public double getMoney() {
          
   
		return money;
	}
	public void setMoney(double money) {
          
   
		this.money = money;
	}
	

}
package com.ujiuye.HomeWork;

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

public class HomeWork04 {
          
   


	public static void main(String[] args) {
          
   
		// 创建一个list数组
		List<use> list = new ArrayList<>();
		//定义一个最大消费者的姓名
		String maxname = null ;
		//定义一个最大消费者的额度
		double maxmoney = 0;
		//添加数据
		list.add(new use("李四",8359));
		list.add(new use("李四",1048));
		list.add(new use("王五",3827));
		list.add(new use("李四",2158));
		list.add(new use("李四",553));
		list.add(new use("王五",837));
		list.add(new use("王五",2871));
		list.add(new use("张三",9936));
		//将map里存放消费次数统计
		Map<String, Integer> map = new HashMap<>();
		for (use use : list) {
          
   
			//三则运算来判断消费次数
			map.put(use.getName(), map.get(use.getName()) != null? (map.get(use.getName())+1):1);
		}
		//System.out.println(map);
		//定义entry类型来判断最大消费者
		Set<Map.Entry<String, Integer>> set = map.entrySet();
		int max = 0;
		for (Entry<String, Integer> entry : set) {
          
   
			if(max <= entry.getValue()) {
          
   
				max = entry.getValue();
				System.out.println("最大消费者是"+entry.getKey()+"一共消费了"+max+"次");
				maxname = entry.getKey();
			}
		}
		//增强for进行最大消费者的金额统计
		for (use u : list) {
          
   
			if(maxname.equals(u.getName())){
          
   
				//maxmoney += u.getMoney();
				if(u.getMoney() >= maxmoney) {
          
   
					maxmoney = u.getMoney();
				}
				
			}
		}
		System.out.println("消费金额为"+maxmoney);
		
		
		

	}
	
	

}
经验分享 程序员 微信小程序 职场和发展