java+long+biset,Java 8 Lambda Collectors.summingLong多列?

您需要创建一个额外的类来保存您的2个汇总数字(工资和奖金).和定制收藏家.

让我们说你有

private static final class Summary {

private double salarySum;

private double bonusSum;

public Summary() {

this.salarySum = 0;

this.bonusSum = 0;

}

@Override

public String toString() {

return "Summary{" +

"salarySum=" + salarySum +

", bonusSum=" + bonusSum +

'}';

}

}

持有金额.然后你需要一个像这样的收藏家:

private static class EmployeeDetailsSummaryCollector implements Collector {

@Override

public Supplier supplier() {

return Summary::new;

}

@Override

public BiConsumer accumulator() {

return (summary, employeeDetails) -> {

summary.salarySum += employeeDetails.salary;

summary.bonusSum += employeeDetails.bonus;

};

}

@Override

public BinaryOperator combiner() {

return (summary, summary1) -> {

summary.salarySum += summary1.salarySum;

summary.bonusSum += summary1.bonusSum;

return summary;

};

}

@Override

public Function finisher() {

return Function.identity();

}

@Override

public Set characteristics() {

return EnumSet.of(Collector.Characteristics.IDENTITY_FINISH);

}

}

通过这些课程,您可以收集结果

final List employees = asList(

new EmployeeDetails(/* deptName */"A", /* salary */ 100d, /* bonus */ 20d),

new EmployeeDetails("A", 150d, 10d),

new EmployeeDetails("B", 80d, 5d),

new EmployeeDetails("C", 100d, 20d)

);

final Collector collector = new EmployeeDetailsSummaryCollector();

final Map map = employees.stream()

.collect(Collectors.groupingBy(o -> o.deptName, collector));

System.out.println("map = " + map);

打印这个:

map = {A=[salary=250.0, bonus=30.0], B=[salary=80.0, bonus=5.0], C=[salary=100.0, bonus=20.0]}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值