java基础-----Stream流案例

**需求:**某个公司的开发部门,分为开发一部和二部,现在需要进行年中数据结算。
分析:
①:员工信息至少包含了(名称、性别、工资、奖金、处罚记录)
②:开发一部有4个员工、开发二部有5名员工
3:分别筛选出2个部门的最高工资的员工信息,封装成优秀员工对象Topperformer
④:分别统计出2个部门的平均月收入,要求去掉最高和最低工资。
⑤:统计2个开发部门整体的平均工资,去掉最低和最高工资的平均值。

package com.itheima.game;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class StreamDemo {
    public static double allMoney;
    public static double allMoney2;
    public static void main(String[] args) {
        List<Employee> one = new ArrayList<>();
        one.add(new Employee("小高", '男', 30000, 20000, null));
        one.add(new Employee("小乖", '女', 25000, 20000, null));
        one.add(new Employee("小美", '女', 23000, 200, "顶撞上司"));
        one.add(new Employee("小明", '男', 12000, 2000, "迟到"));

        List<Employee> two = new ArrayList<>();
        two.add(new Employee("小小", '男', 234000, 1000, "迟到"));
        two.add(new Employee("小天", '男', 14000, 7000, null));
        two.add(new Employee("小领", '男', 12340, 2600, "迟到"));
        two.add(new Employee("小吉", '男', 12000, 2000, null));
        two.add(new Employee("小太", '男', 12500, 2000, "迟到"));

        //1、开发一部门的最高工资的员工
        //指定大小规则
        Employee e = one.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
                .get();
        System.out.println(e);
        TopPerformer t=one.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
                .map(e3->new TopPerformer(e.getName(), e.getBonus()+e.getSalary())).get();
        System.out.println(t);

        //2、统计平均工资,去掉最高工资和最低工资
        one.stream().sorted(((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())))
                .skip(1).limit(one.size()-2).forEach(e3->{
                    //求出总和:剩余员工的工资总和
            allMoney+=(e.getSalary()+e.getBonus());
        });
        System.out.println("开发部one的平均工资是:"+allMoney/(one.size()-2));

        //3、合并2个集合流,再统计
        Stream<Employee> s1=one.stream();
        Stream<Employee> s2=two.stream();
        Stream<Employee> s3=Stream.concat(s1,s2);
        s3.sorted((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus()))
                .skip(1).limit(one.size()+two.size()-2).forEach(e4->{
                    //求出总和:剩余员工的工资总和
                    allMoney2+=(e.getSalary()+e.getBonus());
                });
        //精确位数
        BigDecimal a=BigDecimal.valueOf(allMoney2);
        BigDecimal b=BigDecimal.valueOf((one.size()+two.size()-2));
        System.out.println("开发部门的平均工资是:"+a.divide(b,2, RoundingMode.HALF_UP));//保留两位小数四舍五入



    }

}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值