StreamDemonTest类: java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.stream.Stream; public class StreamDemonTest { public static double summoney; public static double summoney1; public static void main(String[] args) { //需求:某个公司的开发部门,分为开发一部和二部,现在需要进行年中数据结算。 //员工信息至少包含了(名称、性别、工资、奖金、处罚记录) //开发一部有4个员工、开发二部有5名员工 //分别筛选出2个部门的最高工资的员工信息,封装成优秀员工对象Topperformer //分别统计出2个部门的平均月收入,要求去掉最高和最低工资。 //统计2个开发部门整体的平均工资,去掉最低和最高工资的平均值。 Collection<Employee> one=new ArrayList<>();//一部 one.add(new Employee("张三","男",299000.0,6500.00)); one.add(new Employee("张wu","男",27000.0,6500.00)); one.add(new Employee("张si","男",269000.0,6500.00)); one.add(new Employee("张liu","男",229000.0,6500.00)); //开发二部 Collection<Employee> two=new ArrayList<>(); one.add(new Employee("w三","男",299000.0,6500.00)); one.add(new Employee("wwu","男",27000.0,6500.00)); one.add(new Employee("wsi","男",269000.0,6500.00)); one.add(new Employee("wliu","男",229000.0,6500.00)); one.add(new Employee("wl七","男",229000.0,6500.00)); //分别筛选出2个部门的最高工资的员工信息,封装成优秀员工对象Topperformer System.out.println(one.stream().max((e1, e2) -> Double.compare(e1.getMoney() + e1.getYearMoney(), e2.getMoney() + e2.getYearMoney())) .map(e->new Topperformer(e.getName(),e.getMoney()+e.getYearMoney())).get()); //分别统计出2个部门的平均月收入,要求去掉最高和最低工资。 one.stream().sorted((e1, e2) -> Double.compare(e1.getMoney() + e1.getYearMoney(), e2.getMoney() + e2.getYearMoney())) .skip(1).limit(one.size()-2).forEach(e->{ //计算剩余员工的工资总和 summoney+=(e.getMoney()+e.getYearMoney()); }); System.out.println( summoney); //统计2个开发部门整体的平均工资,去掉最低和最高工资的平均值 Stream<Employee> m1=one.stream(); Stream<Employee> m2=two.stream(); Stream<Employee> m3=Stream.concat(m1,m2); m3.sorted((e1, e2) -> Double.compare(e1.getMoney() + e1.getYearMoney(), e2.getMoney() + e2.getYearMoney())) .skip(1).limit((one.size()+ two.size())-2).forEach(e->{ //计算剩余员工的工资总和 summoney1+=(e.getMoney()+e.getYearMoney()); }); BigDecimal a=BigDecimal.valueOf(summoney1); BigDecimal b=BigDecimal.valueOf(one.size()+two.size()-2); System.out.println("2个开发部门整体的平均工资:"+a.divide(b,2, RoundingMode.HALF_UP)); } }
Employee类:
public class Employee { private String name; private String sex; private double money; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", sex='" + sex + '\'' + ", money=" + money + ", yearMoney=" + yearMoney + '}'; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public double getYearMoney() { return yearMoney; } public void setYearMoney(double yearMoney) { this.yearMoney = yearMoney; } public Employee() { } public Employee(String name, String sex, double money, double yearMoney) { this.name = name; this.sex = sex; this.money = money; this.yearMoney = yearMoney; } private double yearMoney; }
Topperformer类:
public class Topperformer { private String name; private double money; public Topperformer(String name, double money) { this.name = name; this.money = money; } public Topperformer() { } public Topperformer(Employee employee) { } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public String getName() { return name; } @Override public String toString() { return "Topperformer{" + "name='" + name + '\'' +money+ '}'; } public void setName(String name) { this.name = name; } public Topperformer(String name) { this.name = name; } }