Java中Stream流的运用案例

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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Traveler飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值