package org.softlang.company; import rx.Observable; import rx.util.functions.Action1; import rx.util.functions.Func1; import java.util.ArrayList; import java.util.List; public class Company { private final String name; private final List<Department> departments; public Company(String name) { this.name = name; this.departments = new ArrayList<>(); } public String getName() { return name; } public void addDepartment(Department dept) { departments.add(dept); } public Observable<Double> total() { return Observable.sumDouble(Observable.from(departments).flatMap(new Func1<Department, Observable<Double>>() { @Override public Observable<Double> call(Department department) { return department.total(); } })); } public void cut() { Observable.from(departments).subscribe(new Action1<Department>() { @Override public void call(Department department) { department.cut(); } }); } }