Вы пытаетесь решить более общую проблему составления результирующего объекта (в данном случае ReturnFormat
) на основе динамической c информации. Кроме того, вместе с каждым набором данных настраиваются метаданные - тип, метка и т. Д. c. В примере, который вы опубликовали, вы жестко закодировали связь между набором данных и этими метаданными, но вам понадобится какой-то способ установить sh это отношение для данных динамически, если у вас здесь переменное число параметров.
Таким образом, у вас есть несколько вариантов:
- Сделать
makeThribleLineChart
метод varargs , чтобы принять переменное число параметров, представляющих ваши данные. Теперь у вас есть проблема связывания метаданных с вашими параметрами - лучший вариант, вероятно, состоит в том, чтобы обернуть данные и метаданные вместе в какой-то новый объект, который предоставляется в качестве каждого параметра makeThribleLineChart
.
Таким образом, вы получите сигнатуру это немного похоже на ReturnFormat makeThribleLineChart(DataMetadataWrapper... allDatasets)
, где DataMetadataWrapper
содержит все необходимое для создания одного экземпляра FormatHelper
. - Используйте шаблон компоновщика, аналогичный компоновщикам коллекций в guava , для Пример примерно так:
class ThribbleLineChartBuilder {
List<FormatHelper<String[]>> formatHelpObj = new ArrayList<>();
ThribbleLineChartBuilder addDataSet(String describeType, String label, String yAxisId, List<NameCountModel> data) {
String[] dataArray = ... ; // build your array of data
FormatHelper<String[]> formatHelper = new FormatHelper<String[]>();
formatHelper.setData(dataArray);
formatHelper.setType(describeType);
... // set any other parameters that the FormatHelper requires here
formatHelpObj.add(formatHelper);
return this;
}
ReturnFormat build() {
ReturnFormat returnFormat = new ReturnFormat(null, null);
returnFormat.setData(this.formatHelpObj);
... // setup any other fields you need in ReturnFormat
return returnFormat;
}
}
// usage:
new ThribbleLineChartBuilder()
.addDataSet("line", "Uudet", "y-axis-1", totalCount)
.addDataSet("line", "P1 päivystykseen heti", null, p1Count)
... // setup your other data sources
.build()