java 8 流 group by 和 summing double
java 8 stream group by and summing double
我对 java 8 中的流很陌生,所以我的方法可能是错误的。
我有2个对象如下
object1 {
BigDecimal amount;
Code1 code1;
Code2 code2;
Code3 code3;
String desc;
}
object2 {
BigDecimal amount;
Code1 code1;
Code2 code2;
Code3 code3;
}
所以我想收集所有 object1,其中 code1 && code2 && code3 相同,然后将数量相加添加到 object2 列表中。
我没有代码来做...我想写一个代码来完成这项工作
我正在尝试实现 http://docs.oracle.com/javase/tutorial/collections/interfaces/map.html
中的内容
或者按部门计算所有工资的总和:
// Compute sum of salaries by department
Map<Department, Integer> totalByDept = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.summingInt(Employee::getSalary)));
感谢 JB Nizet 为我指明了正确的方向。
我不得不修改我的 object2
public class CodeSummary {
Double amount;
CodeKey key;
//getters and setters
}
public class CodeKey {
String code1;
String code2;
String code3;
//getters and setters
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof CodeKey)) return false;
CodeKey that = (CodeKey) o;
if (!code1.equals(that.code1)) return false;
if (!code2.equals(that.code2)) return false;
if (!code3.equals(that.code3)) return false;
return true;
}
@Override
public int hashCode() {
int result = code1.hashCode();
result = 31 * result + code2.hashCode();
result = 31 * result + code3.hashCode();
return result;
}
}
迭代对象 1 并填充对象 2。一旦我填充了 object2(现在是 codeSymmary)。我可以使用下面的方法来完成这项工作。
Map<CodeKey, Double> summaryMap = summaries.parallelStream().
collect(Collectors.groupingBy(CodeSummary::getKey,
Collectors.summingDouble(CodeSummary::getAmount))); // summing the amount of grouped codes.
如果有人以此为例。然后确保覆盖键对象中的 equal 和 hashcode 函数。否则分组将不起作用。
希望这对某人有帮助
我对 java 8 中的流很陌生,所以我的方法可能是错误的。
我有2个对象如下
object1 {
BigDecimal amount;
Code1 code1;
Code2 code2;
Code3 code3;
String desc;
}
object2 {
BigDecimal amount;
Code1 code1;
Code2 code2;
Code3 code3;
}
所以我想收集所有 object1,其中 code1 && code2 && code3 相同,然后将数量相加添加到 object2 列表中。
我没有代码来做...我想写一个代码来完成这项工作 我正在尝试实现 http://docs.oracle.com/javase/tutorial/collections/interfaces/map.html
中的内容或者按部门计算所有工资的总和:
// Compute sum of salaries by department
Map<Department, Integer> totalByDept = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.summingInt(Employee::getSalary)));
感谢 JB Nizet 为我指明了正确的方向。 我不得不修改我的 object2
public class CodeSummary {
Double amount;
CodeKey key;
//getters and setters
}
public class CodeKey {
String code1;
String code2;
String code3;
//getters and setters
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof CodeKey)) return false;
CodeKey that = (CodeKey) o;
if (!code1.equals(that.code1)) return false;
if (!code2.equals(that.code2)) return false;
if (!code3.equals(that.code3)) return false;
return true;
}
@Override
public int hashCode() {
int result = code1.hashCode();
result = 31 * result + code2.hashCode();
result = 31 * result + code3.hashCode();
return result;
}
}
迭代对象 1 并填充对象 2。一旦我填充了 object2(现在是 codeSymmary)。我可以使用下面的方法来完成这项工作。
Map<CodeKey, Double> summaryMap = summaries.parallelStream().
collect(Collectors.groupingBy(CodeSummary::getKey,
Collectors.summingDouble(CodeSummary::getAmount))); // summing the amount of grouped codes.
如果有人以此为例。然后确保覆盖键对象中的 equal 和 hashcode 函数。否则分组将不起作用。
希望这对某人有帮助