在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;
}