在java流中收集字段的和

在java流中收集字段的和,java,lambda,java-stream,Java,Lambda,Java Stream,考虑以下类别: public class PersonalExpense { private String name; private int currentExpenses; ... 如何编写与第一个方法(getRemainingCompanyBalance)相同的java流“管道”。此代码导致错误 该列表包含每个部门的单独列表。子列表中的每个条目都是该类的一个实例。名称/费用: 德#1第一/9900, 第1秒“/8700, 德#2第一“/8500, 第2秒/100

考虑以下类别:

public class PersonalExpense {
    private String name;
    private int currentExpenses;

    ...
如何编写与第一个方法(getRemainingCompanyBalance)相同的java流“管道”。此代码导致错误

该列表包含每个部门的单独列表。子列表中的每个条目都是该类的一个实例。名称/费用:

德#1第一/9900, 第1秒“/8700, 德#2第一“/8500, 第2秒/10000, 德#3优先/7800, 第3秒/6900

private static long getRemainingCompanyBalance(long initialBalance,List total){
长期剩余余额=初始余额;
用于(列出部门费用:总计){
对于(个人费用个人费用:部门费用){
System.out.println(personalExpense.getName());
remainingBalance=remainingBalance-personalExpense.getCurrentExpenses();
}
}
返回剩余余额;
}
public static long getRemainingCompanyBalanceLambda(long initialBalance,List total){
长期剩余余额=初始余额;
整数和=总数
.stream()
.flatMap(集合::流)
.filter(个人费用的pe->pe实例)
.map(pe->(个人费用)pe)
.collect(收集器.toList())
.mapToInt(个人费用::getCurrentExpenses)
.sum();
返回剩余余额-=总和;
}
}

我试图收集成本,然后从余额中减去它们

您得到了一些不必要的方法调用。您不需要过滤
,因为它已经只包含
PersonalExpense
实例,您不应该将其收集到
列表
,因为这会阻止您将其映射到
IntStream
并计算总和

public static long getRemainingCompanyBalanceLambda ( long initialBalance, List<ArrayList<PersonalExpense>> total) {
    return initialBalance - total
    .stream()
    .flatMap(Collection::stream)
    .mapToInt(PersonalExpense::getCurrentExpenses)
    .sum();
}
public static long getRemainingCompanyBalanceLambda(long initialBalance,List total){
返回初始余额-总计
.stream()
.flatMap(集合::流)
.mapToInt(个人费用::getCurrentExpenses)
.sum();
}
公共静态长期getRemainingCompanyBalanceLambda(长期初始余额,列表总数){
int sum=total.stream()
.flatMap(列表::流)
.mapToInt(个人费用::getCurrentExpenses)
.sum();
返回初始余额-总和;
}

@Eugene这是真的嗯,我个人不认为这是重复的,它不像计算
和那样简单,特别是因为OP似乎不知道什么
平面图等。。。
public static long getRemainingCompanyBalanceLambda ( long initialBalance, List<ArrayList<PersonalExpense>> total) {
    return initialBalance - total
    .stream()
    .flatMap(Collection::stream)
    .mapToInt(PersonalExpense::getCurrentExpenses)
    .sum();
}
public static long getRemainingCompanyBalanceLambda ( long initialBalance, List<ArrayList<PersonalExpense>> total) {

   int sum = total.stream()
        .flatMap(List::stream)
        .mapToInt(PersonalExpense::getCurrentExpenses)
        .sum();

   return initialBalance - sum;

}