package com.insightfullogic.java8.examples.chapter8.lambdabehave.reporting; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; public final class Report { private final List<SuiteReport> suites; private SuiteReport currentSuite; public Report() { suites = new ArrayList<>(); } private void newSuite(String name) { currentSuite = new SuiteReport(name); suites.add(currentSuite); } public void newSpecification(String suiteName, SpecificationReport report) { if (noSuite() || seenNewSuite(suiteName)) { newSuite(suiteName); } currentSuite.add(report); } private boolean seenNewSuite(String suite) { return !currentSuite.getName().equals(suite); } private boolean noSuite() { return currentSuite == null; } public Stream<SuiteReport> suites() { return suites.stream(); } }