Article: Law of Demeter - company using internal methods
class Company { | |
private List<Department> departments; | |
Map<DepartmentCode, BigDecimal> costPerDepartment() { | |
Map<DepartmentCode, BigDecimal> costPerDepartment = new HashMap<>(); | |
departments.forEach(department -> { | |
DepartmentCode departmentCode = department.getCode(); | |
BigDecimal employeesCost = calculateCostOf(department); | |
costPerDepartment.put(departmentCode, employeesCost); | |
}); | |
return costPerDepartment; | |
} | |
private BigDecimal calculateCostOf(Department department) { | |
return department.getTeams().stream() | |
.map(team -> calculateCostOf(team)) | |
.reduce(BigDecimal.ZERO, BigDecimal::add); | |
} | |
private BigDecimal calculateCostOf(Team team) { | |
return team.getMembers().stream() | |
.map(Member::getCost) | |
.reduce(BigDecimal.ZERO, BigDecimal::add); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment