Java中如何更简洁比较salesperson对象销售额并输出最高者姓名?
你当前的硬编码逐个判断的写法扩展性很差,后续新增销售人员时需要重复编写if判断逻辑,推荐用以下两种更简洁的实现方式:
方案1:Java 8+ 用Stream API(最简洁)
先将所有Salesperson对象存入集合,直接通过流的max()方法按销售额匹配最大值:
import java.util.Arrays; import java.util.Comparator; import java.util.List; // 先把所有实例放入列表,后续新增人员只需要往这里加即可 List<Salesperson> salesPeople = Arrays.asList(first, second, third); String highSalesString = salesPeople.stream() // 按1月销售额排序,取最大值对应的对象 .max(Comparator.comparingDouble(Salesperson::getJanSales)) // 转换成你需要的 姓名+职位 格式 .map(sp -> sp.getSName() + " " + sp.getTitle()) // 兼容集合为空的边界场景,避免空指针 .orElse("无有效销售人员数据");
方案2:通用循环写法(兼容Java 8以下版本)
如果你的项目用的是低版本JDK不支持Stream,可以用遍历集合的方式实现,扩展性也远高于硬编码:
import java.util.Arrays; import java.util.List; List<Salesperson> salesPeople = Arrays.asList(first, second, third); double highSales = -Double.MAX_VALUE; String highSalesString = ""; for (Salesperson sp : salesPeople) { if (sp.getJanSales() > highSales) { highSales = sp.getJanSales(); highSalesString = sp.getSName() + " " + sp.getTitle(); } }
扩展:处理多人销售额相同并列最高的场景
如果存在多个销售人员销售额同为最高的情况,可以用以下方式收集所有最高销售额人员信息:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; List<Salesperson> salesPeople = Arrays.asList(first, second, third); // 先拿到全局最高销售额 double maxSales = salesPeople.stream() .mapToDouble(Salesperson::getJanSales) .max() .orElse(0); // 筛选所有销售额等于最高值的人员,生成姓名列表 List<String> topSalesList = salesPeople.stream() .filter(sp -> sp.getJanSales() == maxSales) .map(sp -> sp.getSName() + " " + sp.getTitle()) .collect(Collectors.toList());
内容的提问来源于stack exchange,提问作者David Tejuosho
相关产品推荐
相关产品推荐

