Ява 8 поток группировать и суммировать двойной
Я очень плохо знаком с потоками в 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)));
1 ответ
Спасибо JB Nizet за то, что он указал мне правильное направление. Я должен был изменить мой объект2
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;
}
}
перебрать object1 и заполнить object2. Однажды я заполнил объект object2 (теперь codeSymmary). Я мог бы использовать метод ниже, чтобы сделать работу.
Map<CodeKey, Double> summaryMap = summaries.parallelStream().
collect(Collectors.groupingBy(CodeSummary::getKey,
Collectors.summingDouble(CodeSummary::getAmount))); // summing the amount of grouped codes.
Если кто-то использует это в качестве примера. затем убедитесь, что вы переопределяете функцию равенства и хэш-кода в своем ключевом объекте. иначе группировка не будет работать.
Надеюсь, это поможет кому-то