Source:
public List<Graph> generate(List<? extends Summary> results) { List<Graph> graphs = new ArrayList<>(); List<ClientIOTaskResult> summaries = results.stream().map(x -> (ClientIOTaskResult) x).collect(Collectors.toList()); for (ClientIOOperation operation : ClientIOOperation.values()) { for (Boolean readRandom : Arrays.asList(false, true)) { List<ClientIOTaskResult> opSummaries = summaries.stream().filter(x -> x.mParameters.mOperation == operation) .filter(x -> x.mParameters.mReadRandom == readRandom) .collect(Collectors.toList()); if (!opSummaries.isEmpty()) { Pair<List<String>, List<String>> fieldNames = Parameters.partitionFieldNames( opSummaries.stream().map(x -> x.mParameters).collect(Collectors.toList())); List<String> subTitle = new ArrayList<>(Splitter.fixedLength(100).splitToList( opSummaries.get(0).mParameters.getDescription(fieldNames.getFirst()))); for (ClientIOTaskResult summary : opSummaries) { String series = summary.mParameters.getDescription(fieldNames.getSecond()); subTitle.add(series + ": " + DateFormat.getDateTimeInstance() .format(summary.computeLastEndMs())); } LineGraph responseTimeGraph = new LineGraph( operation + (readRandom ? " - Random" : " - Sequential") + " - Throughput", subTitle, "# Threads", "Throughput (MB/s)"); for (ClientIOTaskResult summary : opSummaries) { String series = summary.mParameters.getDescription(fieldNames.getSecond()); responseTimeGraph.addDataSeries(series, summary.getThroughputData()); responseTimeGraph.setErrors(series, summary.collectErrors()); } graphs.add(responseTimeGraph); } } } return graphs; }

Target:
public List<Graph> generate(List<? extends Summary> results) { List<Graph> graphs = new ArrayList<>(); List<ClientIOTaskResult> summaries = results.stream().map(x -> (ClientIOTaskResult) x).collect(Collectors.toList()); for (ClientIOOperation operation : ClientIOOperation.values()) { for (Boolean readRandom : Arrays.asList(false, true)) { List<ClientIOTaskResult> opSummaries = summaries.stream().filter(x -> x.mParameters.mOperation == operation) .filter(x -> x.mParameters.mReadRandom == readRandom) .collect(Collectors.toList()); if (!opSummaries.isEmpty()) { Pair<List<String>, List<String>> fieldNames = Parameters.partitionFieldNames( opSummaries.stream().map(x -> x.mParameters).collect(Collectors.toList())); List<String> subTitle = new ArrayList<>(Splitter.fixedLength(100).splitToList( opSummaries.get(0).mParameters.getDescription(fieldNames.getFirst()))); for (ClientIOTaskResult summary : opSummaries) { String series = summary.mParameters.getDescription(fieldNames.getSecond()); subTitle.add(series + ": " + DateFormat.getDateTimeInstance() .format(summary.computeLastEndMs())); } LineGraph responseTimeGraph = new LineGraph(String .format("%s - %s - Throughput", operation, opSummaries.get(0).mParameters.getDescription( Collections.singletonList(ClientIOParameters.FIELD_READ_RANDOM))), subTitle, "# Threads", "Throughput (MB/s)"); for (ClientIOTaskResult summary : opSummaries) { String series = summary.mParameters.getDescription(fieldNames.getSecond()); responseTimeGraph.addDataSeries(series, summary.getThroughputData()); responseTimeGraph.setErrors(series, summary.collectErrors()); } graphs.add(responseTimeGraph); } } } return graphs; }